c++ - 如何在不同的 CMakeList.txt 之间共享变量?
问题描述
我有一个项目有多个CMakeList.txt
,一个用于代码,一个用于单元测试,另一个用于库,我想共享一些行CMakeList.txt
以避免重复,例如:
cmake_minimum_required(VERSION 3.0)
或者set(CMAKE_CXX_STANDARD 17)
我可以使用类似的东西include("MyProject/CMakeConfig.txt")
吗?
解决方案
通常,您有一个位于项目顶层的 CMake 列表文件,另一个用作子目录。由于cmake_minimum_required
并且project
项目需要一次,因此您应该在您的情况下不写任何内容。
下面是一个结构示例:
顶级./CMakeLists.txt
:
cmake_minimum_required(VERSION 3.0)
project(my-project CXX)
# set global property for all this file and subdirectories
set(CMAKE_CXX_STANDARD 17)
# needs to be at the top level
enable_testing()
add_subdirectory(src)
add_subdirectory(test)
在src/CMakeLists.txt
:
add_executable(your-exec file1.cpp file2.cpp file3.cpp)
add_library(your-lib file4.cpp file5.cpp file6.cpp)
find_package(liba REQUIRED)
target_link_libraries(your-exec PUBLIC liba::liba)
target_include_directory(...)
# ...
在test/CMakeLists.txt
:
find_package(Catch2 REQUIRED)
add_executable(test1 test1.cpp)
# link into you lib and a test framework
target_link_libraries(test1 PRIVATE your-lib Catch2::Catch2)
add_test(NAME test1 COMMAND test1)
所有添加的子目录都将继承项目的基本属性,例如最低 CMake 版本、启用的语言和显式设置基于目录的属性,例如CMAKE_CXX_STANDARD
.
尽管如此,添加 C++17 作为使用项目的要求总是一个好主意:
# All users of your-lib need C++17
target_compile_features(your-lib PUBLIC cxx_std_17)
推荐阅读
- dictionary - matplotlib 条形图从类别数据框列添加图例
- mysql - MYSQL TIMESTAMPDIFF 函数不起作用
- c# - 为什么我们写 Employee emp = new Employee()
- python-3.x - 检查列值是否在另一列中,其中值是列表
- heroku - 如何将试剂前端部署到 Heroku?
- python - 我需要连接两个相同尺寸但形状不同的向量
- javascript - javascript可以捕获窗口函数吗?
- excel - VBA 是否可以在单元格的开头获取 ' 字符?
- c# - 如果不发生碰撞,则销毁对象?
- excel - 有没有办法根据每个单元格内的 10 多个标准进行过滤?