Sorry. Correction here... Make that:<br><br> COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.sentinel<br>
<br>(The "touch" 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"><<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>></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 "make -j" 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 "single output sentinel file" 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's a mystery then....<br>
<br>Do you see any error output...? What is the "not terminating" 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"><<a href="mailto:cliffyapp@gmail.com" target="_blank">cliffyapp@gmail.com</a>></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 <<a href="mailto:david.cole@kitware.com" target="_blank">david.cole@kitware.com</a>> wrote:<br>
> Show us the surrounding code (i.e. -- the actual copy command)<br>
<br>
</div><nods> - 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 "<br>
SET(FILES_TO_COPY ${inputlist})<br>
FILE(COPY \${FILES_TO_COPY} DESTINATION<br>
${CMAKE_BINARY_DIR}/${DATA_DIR}/${targetdir})<br>
")<br>
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${targetprefix}.cmake<br>
"${${targetprefix}_cmake_contents}")<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>