Sorry. Correction here... Make that:<br><br>  COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.sentinel<br>
 <br>(The &quot;touch&quot; is the rather important part of that command line....)<br><br><br><div class="gmail_quote">On Thu, Feb 10, 2011 at 11:19 AM, David Cole <span dir="ltr">&lt;<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Are you using &quot;make -j&quot; for parallel builds by any chance? Does it still happen if you use make without any -j flags...?<br>
<br>Rather than:<div class="im"><br>     ADD_CUSTOM_COMMAND(<br>
         OUTPUT ${outputlist}<br>
         COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.cmake<br>        DEPENDS ${${datalist}}<br>
 <br></div>I would recommend changing to:<br>     ADD_CUSTOM_COMMAND(<br>
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.sentinel<div class="im"><br>
         COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.cmake<br></div>
         COMMAND ${CMAKE_COMMAND} -E ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.sentinel<br>
         DEPENDS ${${datalist}}<br>
 <br>And then change anything that depends on ${outputlist} (if anything) to depend on the sentinel file instead...<br><br>We use the &quot;single output sentinel file&quot; approach with the ExternalProject_Add custom commands, and it works very well.<br>

<br>Perhaps multiple cmakes are trying to copy the same file at the same time because of parallel building and multiple outputs being specified for the add_custom_command call.... (Speculation) But if true, this might be a reasonable explanation. If not, it&#39;s a mystery then....<br>

<br>Do you see any error output...? What is the &quot;not terminating&quot; thing: is it that make never comes back, or that you have a zombie cmake process after running make...?<div><div></div><div class="h5"><br><br><br>
<br><div class="gmail_quote">On Thu, Feb 10, 2011 at 11:01 AM, Clifford Yapp <span dir="ltr">&lt;<a href="mailto:cliffyapp@gmail.com" target="_blank">cliffyapp@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div>On Thu, Feb 10, 2011 at 10:48 AM, David Cole &lt;<a href="mailto:david.cole@kitware.com" target="_blank">david.cole@kitware.com</a>&gt; wrote:<br>


&gt; Show us the surrounding code (i.e. -- the actual copy command)<br>
<br>
</div>&lt;nods&gt; - sorry, should have provided more detail.<br>
<br>
This is an example file that does the copying:<br>
<br>
      SET(FILES_TO_COPY<br>
/home/user/brlcad/cmake/src/tclscripts/ami.tcl;/home/user/brlcad/cmake/src/tclscripts/ampi.tcl;/home/user/brlcad/cmake/src/tclscripts/cad_clrpick.tcl;/home/user/brlcad/cmake/src/tclscripts/cad_dialog.tcl;/home/user/brlcad/cmake/src/tclscripts/chkexterns.tcl;/home/user/brlcad/cmake/src/tclscripts/<a href="http://fs_dialog.tk" target="_blank">fs_dialog.tk</a>;/home/user/brlcad/cmake/src/tclscripts/helpcomm.tcl;/home/user/brlcad/cmake/src/tclscripts/helplib.tcl;/home/user/brlcad/cmake/src/tclscripts/hoc.tcl;/home/user/brlcad/cmake/src/tclscripts/html_library.tcl;/home/user/brlcad/cmake/src/tclscripts/libdm.tcl;/home/user/brlcad/cmake/src/tclscripts/menu_override.tcl;/home/user/brlcad/cmake/src/tclscripts/mouse.tcl;/home/user/brlcad/cmake/src/tclscripts/vmath.tcl)<br>


      FILE(COPY ${FILES_TO_COPY} DESTINATION<br>
/home/user/brlcad/cmake-build/share/brlcad/7.18.1/tclscripts)<br>
<br>
This is the subset of the macro that generates the files:<br>
<br>
     SET(inputlist)<br>
      FOREACH(filename ${${datalist}})<br>
         SET(inputlist ${inputlist} ${CMAKE_CURRENT_SOURCE_DIR}/${filename})<br>
      ENDFOREACH(filename ${${datalist}})<br>
      SET(${targetprefix}_cmake_contents &quot;<br>
      SET(FILES_TO_COPY ${inputlist})<br>
      FILE(COPY \${FILES_TO_COPY} DESTINATION<br>
${CMAKE_BINARY_DIR}/${DATA_DIR}/${targetdir})<br>
      &quot;)<br>
      FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.cmake<br>
&quot;${${targetprefix}_cmake_contents}&quot;)<br>
      SET(outputlist)<br>
      FOREACH(filename ${${datalist}})<br>
         GET_FILENAME_COMPONENT(ITEM_NAME ${filename} NAME)<br>
         SET(outputlist ${outputlist}<br>
${CMAKE_BINARY_DIR}/${DATA_DIR}/${targetdir}/${ITEM_NAME})<br>
      ENDFOREACH(filename ${${datalist}})<br>
      ADD_CUSTOM_COMMAND(<br>
         OUTPUT ${outputlist}<br>
         COMMAND ${CMAKE_COMMAND} -P<br>
${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.cmake<br>
         DEPENDS ${${datalist}}<br>
         )<br>
      ADD_CUSTOM_TARGET(${datalist}_cp ALL DEPENDS ${outputlist})<br>
</blockquote></div><br>
</div></div></blockquote></div><br>