Hi, The goal that you have is fully supported by CMake. You have just run into a bug in CMake, and you should report this to https://gitlab.kitware.com/cmake/cmake/issues . Basically at a very high level the name out the add_executable target `callback_generator` is the same as the internal name that CMake is using for the add_custom_command. This than causes some logic in CMake (cmTargetTraceDependencies) to incorrectly build another link between the add_custom_command and your add_executable.
The easiest way to solve this issue is name the add_executable target to have a different name than the output of your custom command minus file extension. So maybe something like `callback_generator_exec` On Fri, May 24, 2019 at 2:02 PM Bill Somerville <b...@classdesign.com> wrote: > > On 13/05/2019 12:03, Bill Somerville wrote: > > Hi folks, > > I am struggling to understand what the problem is with this: > > find_program (GO go) > set (GOPATH "${CMAKE_CURRENT_BINARY_DIR}/go") > file (MAKE_DIRECTORY ${GOPATH}) > > set (sources ${CMAKE_CURRENT_SOURCE_DIR}/callback_generator.go) > set (build_command ${GO} build) > set (output callback_generator${CMAKE_EXECUTABLE_SUFFIX}) > add_custom_command (OUTPUT ${output} > COMMAND ${CMAKE_COMMAND} -E env GOPATH=${GOPATH} > CGO_CFLAGS=${CMAKE_CGO_CFLAGS} ${build_command} -o ${output} > ${CMAKE_GO_FLAGS} ${sources} > DEPENDS ${sources} > VERBATIM) > add_custom_target (callback_generator_target DEPENDS > ${CMAKE_CURRENT_BINARY_DIR}/${output}) > add_executable (callback_generator IMPORTED) > set_target_properties (callback_generator > PROPERTIES > IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${output} > ) > add_dependencies (callback_generator callback_generator_target) > > add_custom_target (server ALL DEPENDS callback_generator) > > which gives this error: > > >cmake --version > cmake --version > cmake version 3.14.3 > > >cmake -G "MinGW Makefiles" ..\.. > cmake -G "MinGW Makefiles" ..\.. > -- Configuring done > CMake Error: The inter-target dependency graph contains the following > strongly connected component (cycle): > "callback_generator_target" of type UTILITY > depends on "callback_generator_target" (strong) > The component contains at least one cycle consisting of strong dependencies > (created by add_dependencies) that cannot be broken. > > The set_target_properties () call seems to be part of the problem but I don't > understand why. > > Regards > Bill Somerville. > > Hi again, > > answering my own post since no one has replied. Clearly my question was too > specific. Let me try again with a more general question. I have tools that > can generate executables (programs, static libraries, and shared libraries, > including DLL import libraries on MS Windows). These tools are not directly > supported by CMake but they are both needed within a project that uses them > and installs them as the project artefacts. How do I integrate, for example a > shared library, into a CMake project as if it were produced by a supported > toolchain like C or C++? The library is produced by an add_custom_target() > command (not add_custom_command() since the underlying tools do their own > dependency checking so it is right to run the target commands every build). I > need to have a target that I can use in target_link_libraries() and > install(TARGETS ...) just like one would with a CMake generated library made > with add_library() and programs made with add_executable(). > > If it helps the tools that are not supported by CMake are the Go language > build tools. The project builds some Go programs as utilities but the main > project artefact is a shared library with a C language API built using the > cgo tools. There are many of C and C++ test programs and example programs as > well in the project which need to link against the project shared library etc. > > Regards > Bill Somerville. > > -- > > 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 -- 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