Le mer. 3 oct. 2018 à 09:19, Jan Wielemaker <j...@swi-prolog.org> a écrit :
> Hi, > > Debugging dependencies is not always easy. The -graphviz option is a > nice try, but only seems to do the built-in target types. Is there > some way to get the whole dependency graph, including custom targets > and possibly also the individual files? Not yet I guess: https://gitlab.kitware.com/cmake/cmake/issues/17960 > Of course this can get huge. > Possibly there is some way to concentrate on anything relevant to a > particular target? > Besides the custom target issue. I did craft a python script which loads the dependency graph spitted out by CMake and do various thing on it: - search if there exist a path between two targets - find all path between two targets - reduce the graph (transitive closure) etc... If you use ninja Generator you may try the browse or graph extra tool: https://ninja-build.org/manual.html This is generator specific and it may be difficult to follow your "original" CMake target in the generated ninja version. The problem I'm faced with is this: > > - 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 > 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. i.e: ``DEPENDS`` Reference files and outputs of custom commands created with ``add_custom_command()`` command calls in the same directory (``CMakeLists.txt`` file). They will be brought up to date when the target is built. -- Eric
-- 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