近期在linux编写CMakeLists.txt
文件,整理了一些思路。
一、编写CMakeLists.txt
的基本步骤和思路:
-
初始化CMake:
- 使用
cmake_minimum_required
指令指定CMake的最小版本要求,以确保兼容性。 - 使用
project
指令定义项目名称和可选的语言。
- 使用
-
设置变量:
- 使用
set
指令设置项目相关的变量,例如编译器标志、包含目录、库目录等。
- 使用
-
添加子目录:
- 使用
add_subdirectory
指令包含项目中的子目录,这些子目录通常包含自己的CMakeLists.txt
文件。
- 使用
-
添加可执行文件或库:
- 使用
add_executable
指令添加可执行文件,并指定其源文件。 - 使用
add_library
指令添加静态或共享库,并指定其源文件。
- 使用
-
设置依赖关系:
- 使用
target_link_libraries
指令为目标添加必要的依赖库。
- 使用
-
配置编译选项:
- 使用
add_compile_options
或set
指令添加编译器特定的优化或警告选项。
- 使用
-
配置安装规则:
- 使用
install
指令配置项目文件的安装位置和规则。
- 使用
-
测试:
- 如果项目包含测试,可以使用
enable_testing
和add_test
指令来配置和添加测试。
- 如果项目包含测试,可以使用
-
清理和打包:
- 使用
clean_policy
和configure_file
等指令来清理构建环境或准备打包。
- 使用
还需要注意的是:清晰的逻辑结构,确保所有的依赖关系和构建步骤都被正确配置。此外,应该考虑到跨平台构建的需求,使用条件编译和检查来处理不同操作系统或编译器的特性差异。
二、示例
展示了如何为一个包含单个可执行文件和一个静态库的项目配置CMake构建系统。
项目结构
假设有以下项目结构:
MyProject/
├── CMakeLists.txt
├── src/
│ └── main.cpp
└── lib/
└── math_utils.cpp
└── math_utils.hpp
CMakeLists.txt内容
在项目的根目录下创建CMakeLists.txt
文件,并填写以下内容:
cmake_minimum_required(VERSION 3.21)
project(MyProject)
# 设置变量指向源代码和头文件目录
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(HEADERS_DIR ${SOURCE_DIR}/src)
set(LIBS_DIR ${SOURCE_DIR}/lib)
# 添加源文件到变量中
aux_source_directory(src SRC_LIST)
aux_source_directory(lib LIB_LIST)
# 创建可执行文件
add_executable(my_program ${SRC_LIST})
# 创建静态库
add_library(math_utils STATIC ${LIB_LIST})
# 将静态库链接到可执行文件
target_link_libraries(my_program math_utils)
构建说明
cmake_minimum_required
指定了CMake的最小版本要求,以确保兼容性。project
定义了项目名称。set
指令用于设置项目相关的变量,指向源代码和头文件目录。aux_source_directory
命令递归地查找指定目录下的源文件,并将它们添加到列表变量中。add_executable
和add_library
分别用于创建可执行文件和静态库,并指定它们的源文件列表。target_link_libraries
用于将静态库链接到可执行文件。
编译项目
在终端中,进入项目的根目录,创建一个名为build
的目录,并在该目录中运行CMake来配置项目:
mkdir build
cd build
cmake ..
之后,运行make
来编译项目:
make
编译完成后,可执行文件my_program
将位于build
目录下,您可以通过以下命令运行它:
./my_program
标签:可执行文件,CMakeLists,add,指令,编写,txt,添加
From: https://blog.csdn.net/icon_sunshine/article/details/140363772