CMake:取决于另一个项目

时间:2013-04-25 10:38:22

标签: dependencies cmake

我是CMake的新手,想要用它来完成一个非常“共同”的任务。到目前为止,我只使用Eclipse CDT和自动生成的makefile。假设我有两个项目A和B.A构建一个静态库,B需要这个库。当然,在构建B时,我想确保A构建的静态库是最新的。因此,如果在A的源中进行了任何更改,则项目B的构建应该触发A的构建。这是Eclipse的简单插入A作为B的依赖项时的默认行为。

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

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

1 个答案:

答案 0 :(得分: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是兄弟姐妹)。