On 02.04.2013 15:19, Brad King wrote:
Hi Peter,We've come across a case where the Makefile, VS, and Xcode generators work but Ninja does not:: cmake_minimum_required(VERSION 2.8.10) project(DependSideEffect C) add_library(A a.c) add_custom_command( TARGET A POST_BUILD COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/a.c a.txt ) add_custom_command( OUTPUT b.txt DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/a.txt COMMAND cp a.txt b.txt ) add_custom_target(B ALL DEPENDS b.txt) add_dependencies(B A) CMake's rule for target-level dependencies is that "A" must be up to date before the build system evaluates the rules of "B". Building with Ninja fails with:: ninja: error: 'a.txt', needed by 'b.txt', missing and no known rule to make it Relevant portions of build.ninja:: build libA.a: C_STATIC_LIBRARY_LINKER CMakeFiles/A.dir/a.c.o POST_BUILD = cd ".../build" && cp .../a.c a.txt ... build b.txt: CUSTOM_COMMAND a.txt || libA.a COMMAND = cd ".../build" && cp a.txt b.txt ... The rule for "b.txt" has an order-only dependency on "libA.a" and an explicit dependency on "a.txt". Ninja does not wait for the order-only dependencies to be up to date before complaining that the explicit dependency is missing. Can ninja be taught to wait for order-only dependencies to be up to date to see if they produce any of the explicit dependencies as a side effect? Is there another way to do this in CMake's Ninja gen? Thanks, -Brad
In build.ninja is no rule for coping a.c to a.txt at all. Seems support for add_custom_command(TARGET) is missing or broken. Could you open a ticket and assign to me? Peter -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
