gpt4 book ai didi

c++ - 如何在不同的CMakeList.txt之间共享变量?

转载 作者:行者123 更新时间:2023-12-02 10:08:02 24 4
gpt4 key购买 nike

我有一个项目,其中包含多个CMakeList.txt,一个用于代码,一个用于单元测试,另外两个用于库,我想共享CMakeList.txt的某些行以避免重复,例如:
cmake_minimum_required(VERSION 3.0)set(CMAKE_CXX_STANDARD 17)
我可以使用include("MyProject/CMakeConfig.txt")之类的东西吗?

最佳答案

通常,您有一个位于项目顶层的CMake列表文件,另一个用作子目录。由于项目一次需要cmake_minimum_requiredproject,因此您无需编写任何示例。

这是一个结构示例:

顶级./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)

关于c++ - 如何在不同的CMakeList.txt之间共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59200562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com