On 03/10/18 09:53, Eric Noulard wrote:
- I have an ordinary executable target `swipl` - To run, this requires a boot file `swipl.prc` that is created by calling `swipl -b ...` Hum... I don't get it. For running? creating? target "swipl" you need to run it? There is a chicken & eggs problem or I misread what you said? - I'd like to run `swipl` for creating a library index file. So, these targets need to be built in the order above. It turns out that sometimes step 3 runs before 2 completes. At least, this happens on MacOS using cmake 3.11.2. So far I haven't seen it on Linux (where I use 3.10). The definition goes like this: add_custom_command( OUTPUT swipl.prc COMMAND swipl -O -b ${SWIPL_BOOT_ROOT}/init.pl <http://init.pl> DEPENDS swipl ${SWIPL_BOOT_FILES} ) add_custom_command( OUTPUT ${PL_LIB_INDEX} COMMAND swipl -f none -g "\"make_library_index('${SWIPL_LIBRARY_ROOT}')\"" -t halt DEPENDS swipl.prc ${PL_LIB_FILES_ALL} ) add_custom_target(prolog_products ALL DEPENDS swipl.prc ${PL_LIB_INDEX} ) The first specifies building swipl.prc, the second the index file and the custom target ensures the default build will create both files. I don't see what is wrong and a visual dependency graph might reveal this ... Are those three add_custom_xxx in the same directory? DEPENDS for custom_xxx do not cross directory.
So this was not the problem. The problem was that on the Mac I had build the system before using the autoconf/make suite, which had created `swipl.prc` in the source tree. Now, this is the second time I've been fooled by this: If a custom command has a DEPENDS, this points at the CMAKE_CURRENT_SOURCE_DIR if the file exists there and at the CMAKE_CURRENT_BINARY_DIR otherwise. This makes sense, but easily leads to things that are hard to figure out ... Thanks. In particular for pointing at Ninja's tools for figuring out dependencies. Cheers --- Jan -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake