[CMake] Specifying code in one subdirectory depends on a library from another subdirectory

Rafael Vargas rsvargas at gmail.com
Tue Mar 19 16:28:44 EDT 2019


How is this file subproject1 depends on generated?

I have a project where some file was generated using add_custom_command,
like this:

    add_custom_command( OUTPUT ${FILE_NAME} COMMAND ${CMD_LINE} )

So, in order to my lib to depend on this file I created a custom target

    add_custom_target( target_name, ALL DEPENDS ${FILE_NAME} )

and then added as a dependency to my lib:

    add_dependencies( my_lib_name, target_name ${FILE_NAME} )

See and try adding an explicit dependency on the generated file like this.


Em ter, 19 de mar de 2019 às 14:46, Timothy Wrona <tjwrona1992 at gmail.com>
escreveu:

> Never mind... I spoke too soon. add_dependencies isn't working. It is
> correctly making the other project build first, but the header file is for
> some reason not generated until after it is needed.
>
> On Tue, Mar 19, 2019 at 1:41 PM Timothy Wrona <tjwrona1992 at gmail.com>
> wrote:
>
>> Seems I might be able to answer my own question.
>>
>> It looks like "add_dependencies(subproject1_exe subproject2_lib)" worked.
>>
>> I had to do a clean first though because it didn't work the first time
>> since some old files were left around.
>>
>> Hope this helps anyone else with a similar issue!
>>
>> On Tue, Mar 19, 2019 at 1:13 PM Timothy Wrona <tjwrona1992 at gmail.com>
>> wrote:
>>
>>> I am working on a complex CMake project that is part of a large legacy
>>> system that uses a top level project and "add_subdirectory" to create
>>> subprojects.
>>>
>>> I have run into an issue because now one of the subprojects is dependant
>>> on another subproject, but I can't seem to find a clear way to tell
>>> CMake about this dependency.
>>>
>>> Consider this example:
>>>
>>>     my_project/
>>>         CMakeLists.txt:
>>>           add_subdirectory('subproject1')
>>>           add_subdirectory('subproject2')
>>>
>>>     my_project/subproject1/
>>>         CMakeLists.txt:
>>>             add_executable(subproject1_exe <sources>)
>>>             target_link_libraries(subproject1_exe subproject2_lib) # <--
>>> THIS is the problem
>>>
>>>     my_project/subproject2/
>>>         CMakeLists.txt:
>>>             add_library(subproject2_lib <sources>)
>>>
>>> The actual code is much more complex than this, but this simple example
>>> illustrates the problem. The actual compilation error I am getting is
>>> caused by subproject1 including a header file that gets generated when
>>> subproject2 is built.
>>>
>>> Does anyone know how to properly tell CMake about the dependency so it
>>> will build correctly?
>>>
>> --

-- 
Rafael Vargas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190319/c0fc7ca5/attachment-0001.html>


More information about the CMake mailing list