为子项目应用 CMake 设置

Posted

技术标签:

【中文标题】为子项目应用 CMake 设置【英文标题】:Applying CMake setup for children projects 【发布时间】:2019-03-18 13:29:39 【问题描述】:

我有一个这样的项目目录设置:

3rdparty 
    |--glfw
test
   |--3rdparty
      |--googletest
   |--CMakeLists.txt (Test project CMakeLists)
CMakeLists.txt (Main project CMakeLists)

在主项目中设置外部依赖:

add_subdirectory(3rdparty/glfw)
target_link_libraries(Main glfw)

将所有依赖项也应用于测试项目的最佳方法是什么?我是否应该在子 CMakeLists.txt 中重做所有依赖代码?提前致谢

【问题讨论】:

link_libraries 命令,它与给定库链接所有将在命令调用后创建的目标。是你要找的吗? 【参考方案1】:

通常,当您有一个测试项目时,您必须将测试可执行文件链接到其余代码。通过使用 CMake 执行此操作,您应该自动获得传递依赖项。但是,要做到这一点,您需要基于 CMake 目标的 API。

add_executable(Main ... your cpp files ...)
add_library(YourLib ... your cpp files ...)

add_subdirectory(3rdparty/glfw) # or find_package(glfw)

# link YourLibs to glfw
target_link_libraries(YourLibs PUBLIC glfw)

# link Main to YourLibs and its public dependencies
target_link_libraries(Main PUBLIC YourLibs)

然后在您的测试 cmake 文件中,链接到与您的 exe 相同的目标以获得您自己的功能的访问权限,包括目录和库:

add_executable(Test cppfile.cpp)
add_test(Test)
target_link_libraries(Test PRIVATE YourLibs gtest)

【讨论】:

以上是关于为子项目应用 CMake 设置的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 进行交叉编译

CMake 错误:此项目中使用了以下变量,但它们设置为 NOTFOUND

Gnome Builder 为 CMake 项目设置源目录

Qt6-CMake模板项目模板

CMake - 同一项目中的应用程序/库之间的依赖项(标头)

使用 CMAKE 构建 GLFW3 应用程序 - GLFW LIBRARIES 未设置