对依赖的CMake子目录使用project()

时间:2016-06-28 08:24:11

标签: cmake project subdirectory

我有几个项目由几个库组成,每个库都位于自己的子目录中,由最顶层的$("#"+data.url).progress({ percent: 72 }); 文件编织在一起。我习惯在每个CMakeLists.txt文件的顶部使用project(<DIRNAME>),我尝试以这样的方式构建子项目,使它们可以与顶层项目分开编译。然而,虽然这可能对独立的核心库有意义,但它不适用于依赖它们的库,因为我需要做类似的事情

CMakeLists.txt

如果我尝试将target_link_libraries(gui core) 编译为独立项目,则core也将被定义。

在这种情况下使用gui是错误的,还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

品味

这在我看来主要是品味问题。我不认为多个project()命令本身是一个问题,我使用这种方法看到的项目往往会在其他部分重复,有时会遇到全局缓存变量的问题。

依赖图书馆

更相关的事实是,依赖库还将添加包含依赖项。

对于独立的静态库目标 - 不是真正链接库的可执行文件或共享库目标 - 可以忽略简单的target_link_libraries()命令:

if (TARGET core)
    target_link_libraries(gui core)
endif()

但是头文件包含依赖性遗留。

CMake中的独立项目

对我来说,一个(子)项目真的是独立的,不仅需要project()命令,还需要export(TARGETS ...)命令。然后你可以,例如使用find_package()命令解决任何打开的依赖关系,例如:

if (NOT TARGET core)
    find_package(core REQUIRED)
endif()
target_link_libraries(gui core)

<强>参考