编写CMakeLists.txt的顺序
编程 C++ 11

一、编写技巧

1、先写cmake的版本

在文件开头,指定所需的 CMake 最低版本,以确保项目可以在兼容的 CMake 环境中构建。

// 要求cmake的版本至少是3.5
cmake_minimum_required(VERSION 3.5)

2、写项目名称和语言

使用 project() 命令定义项目名称,并可以指定项目的语言(如 C、C++ 等)。

// 项目名称为 MyProject,使用 C++ 语言
project(my_project_name LANGUAGES CXX)

3、定义选项和配置

option(ENABLE_FEATURE_X "Enable Feature X" ON)  # 示例:定义一个选项,默认为 ON

4、查找依赖项

使用 find_package() 命令查找项目所需的外部库或工具。

find_package(OpenCV REQUIRED)  # 示例:查找 OpenCV 库
find_package(Boost REQUIRED COMPONENTS filesystem system)  # 示例:查找 Boost 库的特定组件

5、包含目录

使用 include_directories() 命令添加额外的头文件搜索路径。

include_directories(${CMAKE_SOURCE_DIR}/include)  # 示例:添加项目中的 include 目录

6、源文件和可执行文件

# 示例:定义源文件列表
set(SOURCES
    src/main.cpp
    src/utils.cpp
)  

# 示例:创建可执行文件
add_executable(MyExecutable ${SOURCES}) 

7、链接库

使用 target_link_libraries() 命令将可执行文件或库与所需的外部库链接。

# 示例:链接 OpenCV 和 Boost 库
target_link_libraries(MyExecutable PRIVATE OpenCV::Core Boost::filesystem Boost::system) 

8、编译选项和定义

# 示例:添加编译警告选项
target_compile_options(MyExecutable PRIVATE -Wall -Wextra)  

# 示例:添加编译定义
target_compile_definitions(MyExecutable PRIVATE MY_DEFINE=1) 

9、安装

使用 install() 命令定义安装规则,以便在构建后安装可执行文件、库或头文件。

# 示例:安装可执行文件到 bin 目录
install(TARGETS MyExecutable DESTINATION bin)  

# 示例:安装头文件到 include 目录
install(DIRECTORY include/ DESTINATION include)  

10、测试(可选)

如果项目包含测试,可以使用 enable_testing()add_test() 命令设置测试。

enable_testing()  # 启用测试
add_test(NAME MyTest COMMAND MyExecutable --test)  # 示例:添加测试

二、完整示例

cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)

option(ENABLE_FEATURE_X "Enable Feature X" ON)

find_package(OpenCV REQUIRED)
find_package(Boost REQUIRED COMPONENTS filesystem system)

include_directories(${CMAKE_SOURCE_DIR}/include)

set(SOURCES
    src/main.cpp
    src/utils.cpp
)

add_executable(MyExecutable ${SOURCES})

target_link_libraries(MyExecutable PRIVATE OpenCV::Core Boost::filesystem Boost::system)

target_compile_options(MyExecutable PRIVATE -Wall -Wextra)
target_compile_definitions(MyExecutable PRIVATE MY_DEFINE=1)

install(TARGETS MyExecutable DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)

enable_testing()
add_test(NAME MyTest COMMAND MyExecutable --test)

编写CMakeLists.txt的顺序
http://47.92.222.121:8090/archives/1vhMgyMB
作者
禧语许
发布于
更新于
许可