3

我对 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 但我也不知道如何处理它。

4

1 回答 1

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 是兄弟姐妹)。

于 2013-04-25T13:45:36.657 回答