【问题标题】:CMake: Depending on another projectCMake:取决于另一个项目
【发布时间】:2017-04-05 05:27:10
【问题描述】:

我对 CMake 很陌生,想用它完成一个非常“常见”的任务。到目前为止,我只是简单地使用带有自动生成的 makefile 的 Eclipse CDT。假设我有两个项目 A 和 B。A 构建一个静态库,B 需要这个库。当然,在构建B的时候,我要保证A构建的静态库是最新的。因此,如果 A 的源代码发生任何更改,项目 B 的构建应该触发 A 的构建。当简单地将 A 作为 B 的依赖项插入时,这是 Eclipse 的默认行为。

那么,使用 CMake 实现这一目标的最简单方法是什么?我已经阅读了一些教程和类似的问题,但没有一个给我一个令人满意的答案。

例如,http://www.cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets 教程可能是一个解决方案。然而,对于这样一个简单的任务来说,它似乎相当复杂。我必须“安装”A的目标,但我不想安装任何东西,我只想让B依赖A。接下来,我听说了ExternalProject_add,但我也不知道如何处理。

【问题讨论】:

    标签: dependencies cmake


    【解决方案1】:

    如果您从同一个 CMakeLists 文件构建它们,使用目标名称指定链接就足够了:

    add_library(LibraryA ${A_SOURCES}
    target_link_libraries(LibraryA <any libraries that A depends on>)
    
    add_executable(ProgramB)
    target_link_libraries(ProgramB LibraryA <plus other libraries>)
    

    如果它们不在同一个 CMakeLists 文件中,则要么使用 ADD_SUBDIRECTORY() 包含 A 构建,(A 是 B 的子级),要么使用 ADD_SUBDIRECTORY() 从同一个顶级文件构建它们对于每一个(A 和 B 是兄弟姐妹)。

    【讨论】:

    • 它们不在同一个 CMakeLists.txt 文件中,也没有顶级文件。因此,我使用了您最后的建议,即简单地使用 ADD_SUBDIRECTORY(A) 并将 A 的构建目录指定为二进制目录。像魅力一样工作,谢谢!
    • 你能分享你的cmake吗?我有同样的问题,我对 cmake 很陌生 .. 不确定我是否理解 ADD_SUBDIRECTORY
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 2022-01-23
    • 2017-03-22
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多