一、CMakeLists.txt基础知识
1.1 基本结构
1.2 主要命令
1.2.1 `cmake_minimum_required`
1.2.2 `project`
1.2.3 `add_executable`
1.2.4 `add_library`
1.2.5 `include_directories`
1.2.6 `target_include_directories`
1.2.7 `find_package`
1.2.8 `target_link_libraries`
1.2.7 message,信息打印
二、CMakelists 常用的变量
2.1 CMake 预定义变量
2.2 CMakeLists.txt 中定义的变量
2.3 使用变量
2.4 变量作用域
三、cmake安装编写
3.1 cmake安装可执行文件
3.2 cmake安装库
3.3 cmake安装目录
四、CMake测试
4.1 启用测试
4.2 添加测试
4.3 直接运行可执行文件作为测试
4.4 使用外部测试框架(如 Google Test)
4.5 运行测试
五、CMake其他
5.1 GLOB_RECURSE引用全局内容
5.2 CMAKE调试
5.3 execute_process
5.4 获取版本号
5.5 利用-D设置变量
六、其他问题
6.1 CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
解决步骤
6.2 VERSION not allowed unless CMP0048 is set to NEW
一、CMakeLists.txt基础知识
CMakeLists.txt 是 CMake 构建系统用于定义项目的配置文件。CMake 是一个跨平台的自动化构建系统,它使用一个名为 CMakeLists.txt 的文件来指定如何构建项目。这个文件可以包含各种命令,用于指定项目名称、源文件、编译选项、库依赖等。下面是一个详细的指南,介绍如何使用 CMakeLists.txt 文件。
1.1 基本结构
一个基本的 CMakeLists.txt 文件可能如下所示:
cmake_minimum_required(VERSION 3.10)
# 设置项目名称和版本
project(MyProject VERSION 1.0)
# 添加一个可执行文件
add_executable(MyExecutable main.cpp)
1.2 主要命令
1.2.1 cmake_minimum_required
用来指定CMake的最小版本要求。
语法:cmake_minimum_required(VERSION major.minor[.patch[.tweak[.id]]])
1.2.2 project
定义项目的名称和可选的版本号。
语法:project(ProjectName [VERSION major.minor[.patch[.tweak[.id]]]] [DESCRIPTION summary])
1.2.3 add_executable
添加一个可执行文件到项目中。
语法:add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
1.2.4 add_library
添加一个库到项目中。
语法:add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
1.2.5 include_directories
向编译过程添加包含目录。
语法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
1.2.6 target_include_directories
为目标(如可执行文件或库)添加包含目录。
语法:target_include_directories(<target> [SYSTEM] [BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [...])
1.2.7 find_package
查找并加载外部项目。
语法:find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [COMPONENTS [components...]] [OPTIONAL_COMPONENTS [components...]] [CONFIG|NO_MODULE|NO_CONFIG|NO_POLICY_SCOPE] [NAMES name1 [...]])
1.2.8 target_link_libraries
为目标(如可执行文件或库)添加需要链接的库。
语法:target_link_libraries(<target> ... <PRIVATE|PUBLIC|INTERFACE> <item>... [...])
假设你有一个项目,它包含两个源文件 main.cpp 和 MyClass.cpp,以及对应的头文件 MyClass.h。你想编译这两个源文件为一个可执行文件,并且链接到一个名为 MyLibrary 的外部库。
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 设置包含目录
include_directories(${CMAKE_SOURCE_DIR}/include)
# 添加一个可执行文件
add_executable(MyExecutable main.cpp MyClass.cpp)
# 查找并链接外部库
find_pac