Dependencies 取决于另一个项目

Dependencies 取决于另一个项目,dependencies,cmake,Dependencies,Cmake,我对CMake很陌生,希望用它完成一项非常“普通”的任务。到目前为止,我只是将EclipseCDT与自动生成的makefiles一起使用。假设我有两个项目A和B。A构建一个静态库,B需要这个库。当然,在构建B时,我希望确保由A构建的静态库是最新的。因此,如果对a的源代码进行了任何更改,则项目B的构建应该触发a的构建。当简单地将a作为B的依赖项插入时,这是Eclipse的默认行为 那么,使用CMake实现这一点最简单的方法是什么?我读过一些教程和类似的问题,但没有一个能给我满意的答案 例如,本教程

我对CMake很陌生,希望用它完成一项非常“普通”的任务。到目前为止,我只是将EclipseCDT与自动生成的makefiles一起使用。假设我有两个项目A和B。A构建一个静态库,B需要这个库。当然,在构建B时,我希望确保由A构建的静态库是最新的。因此,如果对a的源代码进行了任何更改,则项目B的构建应该触发a的构建。当简单地将a作为B的依赖项插入时,这是Eclipse的默认行为

那么,使用CMake实现这一点最简单的方法是什么?我读过一些教程和类似的问题,但没有一个能给我满意的答案


例如,本教程可能是一个解决方案。然而,对于这样一项简单的任务来说,它似乎相当复杂。我必须“安装”A的目标,但我不想安装任何东西,我只希望B依赖于A。接下来,我听说了ExternalProject\u add,但我也不知道如何处理它。

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

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>)
add_library(LibraryA${A_SOURCES}
目标链接库(图书馆)
添加可执行文件(程序B)
目标链接库(程序库A)

如果它们不在同一个CMakeLists文件中,则可以使用ADD_子目录()包含A构建(A是B的子目录),或者使用ADD_子目录()从同一顶级文件为每个(A和B是兄弟目录)构建它们.

它们不在同一个CMakeLists.txt文件中,也没有顶级文件。因此,我使用了您的上一个建议,即只使用ADD_子目录(A)并将A的build dir指定为binary dir。非常有用,谢谢!您能分享您的cmake吗?我也有同样的问题,而且我对cmake很陌生。我不确定我理解ADD_子目录