Well, in my real case this happens even with out-of-source builds, which also occurs in the test case if I change:

set (OUT ${CMAKE_BINARY_DIR}/ext)

in ext/CMakeLists.txt.

Sure, I can avoid it by renaming the file or target, but I thought this is something that could be avoided by either (a) generating unique ninja target names when possible, or (b) warning at the cmake stage that target names are duplicated.

From my point of view as a CMake user, I see no reason why the combination of add_custom_command and add_custom_target should have a conflict.

On 05/05/17 14:22, Robert Maynard wrote:
Hi,

This is caused by doing an in source build and thereby causing the
issue. The custom command is outputting a file called 'foo', which is
also the chosen name of a target in the ninja file. All of this results
in ninja conflating the two and causing a circular dependency.

Your options are to not to in source builds, or to choose a different
name for your custom target.

On Thu, May 4, 2017 at 3:55 AM, Ignacio Fernández Galván via CMake
<cmake@cmake.org <mailto:cmake@cmake.org>> wrote:

    Hello,

    I have a project where circular dependencies are generated when I
    use the Ninja generator, but not the default Unix Makefiles. I could
    create a minimal test like this:

    $ cat CMakeLists.txt
    add_subdirectory (ext ${PROJECT_BINARY_DIR}/ext)

    $ cat ext/CMakeLists.txt
    set (OUT ${CMAKE_CURRENT_LIST_DIR})

    add_custom_command (OUTPUT ${OUT}/foo
        COMMAND touch ${OUT}/foo
        )

    add_custom_target (foo ALL
        DEPENDS ${OUT}/foo
        )

    add_custom_command (TARGET foo
        POST_BUILD
        COMMAND cp ${OUT}/foo ${CMAKE_BINARY_DIR}/foo
        )

    $ touch ext/bar

    $ cmake -G Ninja .
    [...]

    $ ninja
    ninja: warning: multiple rules generate ext/foo. builds involving
    this target will not be correct; continuing anyway [-w dupbuild=warn]
    ninja: error: dependency cycle: ext/foo -> ext/CMakeFiles/foo.util
    -> ext/CMakeFiles/foo -> ext/foo

    I used a freshly compiled CMake 3.8 and the latest binary ninja from
    https://github.com/Kitware/ninja/releases
    <https://github.com/Kitware/ninja/releases>.

    Ignacio
    --

    Powered by www.kitware.com <http://www.kitware.com>

    Please keep messages on-topic and check the CMake FAQ at:
    http://www.cmake.org/Wiki/CMake_FAQ
    <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
    <http://cmake.org/cmake/help/support.html>
    CMake Consulting: http://cmake.org/cmake/help/consulting.html
    <http://cmake.org/cmake/help/consulting.html>
    CMake Training Courses: http://cmake.org/cmake/help/training.html
    <http://cmake.org/cmake/help/training.html>

    Visit other Kitware open-source projects at
    http://www.kitware.com/opensource/opensource.html
    <http://www.kitware.com/opensource/opensource.html>

    Follow this link to subscribe/unsubscribe:
    http://public.kitware.com/mailman/listinfo/cmake
    <http://public.kitware.com/mailman/listinfo/cmake>



--

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:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to