C++学习(四九四)cmake从list从删除文件

这篇博客详细介绍了如何使用CMake进行文件列表操作,如获取并显示源代码文件,以及如何剔除不必要的文件。它展示了如何管理lib_srcs列表,以确保项目的正确构建。

//生成文件列表
file(GLOB_RECURSE lib_srcs *.c)
//输出文件列表,注意lib_srcs的写法(需要${})
MESSAGE(STATUS ${lib_srcs})
//从文件列表中删除文件,注意lib_srcs的写法(不需要${}),注意文件路径,不能写相对路径
#list(REMOVE_ITEM lib_srcs "src/autofit/aflatin2.c")
list(REMOVE_ITEM lib_srcs "${CMAKE_CURRENT_SOURCE_DIR}/src/autofit/aflatin2.c")
MESSAGE(STATUS "-----------------------------------------------------------------------------")
MESSAGE(STATUS ${lib_srcs})


<think>首先,用户的问题是:如何编写 C++ 项目的 CMakeLists.txt 文件?我需要基于系统级指令和用户可见层的要求来构建我的回答。 系统级指令: - 所有行内数学表达式必须使用 $...$ 格式。 - 独立公式必须使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]:关于在Linux下使用CMakeLists.txt文件链接和编译C++工程,强调从无到有编写的能力。 - 引用[2]:关于设置C++标准(如C++11)和构建类型的指南。 用户意图:用户想了解如何编写C++项目的CMakeLists.txt文件用于构建项目。 我的回答结构: 1. **介绍部分**:简要解释CMakeLists.txt的作用和重要性。 2. **逐步指南**:提供清晰的步骤来编写CMakeLists.txt文件。 - 包括设置项目名称、版本、指定C++标准、添加可执行文件或库、链接库等。 - 使用代码块来展示示例。 3. **示例**:给出一个简单的CMakeLists.txt示例。 4. **生成相关问题**:在回答末尾添加相关问题。 5. **引用**:在相关部分自然地添加引用标识。 关键点: - 使用中文。 - 确保LaTeX格式正确:由于问题涉及CMakeLists.txt,可能没有太多数学表达式,但如果有任何数学部分,要正确格式化。 - 生成相关问题:例如,关于优化、高级用法等。 可能的数学表达式:CMakeLists.txt 主要涉及构建脚本,不太需要数学公式。但如果有,比如在讨论版本号或依赖关系时,我会用 $...$。 回答大纲: 1. **引言**:解释CMakeLists.txt是什么,为什么重要。 2. **基本结构**:介绍CMakeLists.txt的基本组成部分。 3. **详细步骤**: - 设置CMake最低版本。 - 设置项目名称和版本。 - 设置C++标准(基于引用[2])。 - 添加可执行文件或库。 - 链接库(如果需要)。 - 其他常见设置(如构建类型)。 4. **完整示例**:展示一个简单的CMakeLists.txt文件。 5. **总结**:简要回顾。 6. **相关问题**:生成3-5个相关问题。 引用: - 在提到设置C++标准时,引用[2]。 - 在提到从无到有编写时,引用[1]。 最终输出格式: - 使用Markdown。 - 代码块用```cmake或```python(但CMakeLists.txt是文本文件,所以用```cmake或```)。 - 相关问题用§§相关问题§§部分。 确保回答真实可靠:基于我的知识和引用内容。</think>### 如何编写 C++ 项目的 CMakeLists.txt 文件 CMakeLists.txt 文件CMake 构建系统的核心配置文件,用于自动化编译、链接和构建 C++ 项目。它允许您定义项目结构、依赖库和编译选项,确保跨平台兼容性。在 Linux 系统下,CMakeLists.txt 是必备工具,它能帮助您从零开始构建项目[^1]。编写一个有效的 CMakeLists.txt 文件包括几个关键步骤:设置项目基本信息、指定 C++ 标准、添加源文件和目标(如可执行文件或库)、链接依赖库,以及配置构建选项。下面我将逐步指导您完成这一过程,确保结构清晰易懂。 #### 步骤 1: 设置 CMake 最低版本和项目基本信息 在文件开头,指定 CMake 的最低版本要求(确保兼容性)和项目名称、版本。这有助于 CMake 初始化构建环境。 - 使用 `cmake_minimum_required` 设置最低 CMake 版本。 - 使用 `project` 命令定义项目名称和版本。 ```cmake # 设置 CMake 最低版本要求 cmake_minimum_required(VERSION 3.10) # 推荐使用 3.10 或更高版本 # 定义项目名称和版本 project(MyCppProject VERSION 1.0 LANGUAGES CXX) # CXX 表示 C++ 项目 ``` - **说明**:`project` 命令中的 `LANGUAGES CXX` 明确指定项目使用 C++ 语言。项目名称(如 `MyCppProject`)和版本号(如 `1.0`)可根据实际情况修改。 #### 步骤 2: 设置 C++ 标准 C++ 标准(如 C++11、C++17)决定了代码的兼容性和特性支持。在 CMakeLists.txt 中,强制设置标准可避免编译器错误[^2]。 - 使用 `set` 命令设置 C++ 标准。 - 添加 `CMAKE_CXX_STANDARD_REQUIRED ON` 确保编译器强制使用指定标准。 ```cmake # 设置 C++ 标准为 C++11,并强制要求 set(CMAKE_CXX_STANDARD 11) # 可改为 14、17 等 set(CMAKE_CXX_STANDARD_REQUIRED ON) # 如果编译器不支持,则报错停止构建 ``` - **说明**:例如,设置 `CMAKE_CXX_STANDARD 17` 可启用 C++17 特性。`CMAKE_CXX_STANDARD_REQUIRED ON` 确保构建失败时提供明确错误,提高可靠性[^2]。 #### 步骤 3: 添加可执行文件或库 根据项目需求,定义构建目标(如可执行文件或静态/动态库)。使用 `add_executable` 创建可执行文件,或 `add_library` 创建库。 - 指定源文件列表(如 `.cpp` 文件)。 - 示例:添加一个名为 `main` 的可执行文件。 ```cmake # 添加可执行文件,源文件为 main.cpp add_executable(main src/main.cpp) # src/main.cpp 是源文件路径 # 或者添加一个库 # add_library(my_library STATIC src/lib.cpp) # STATIC 表示静态库 ``` - **说明**:源文件路径支持通配符(如 `src/*.cpp`),但不推荐在生产环境中使用,以避免意外包含文件。路径应基于项目目录结构。 #### 步骤 4: 链接依赖库 如果项目依赖外部库(如 Boost 或 OpenCV),使用 `target_link_libraries` 命令链接它们。 - 先使用 `find_package` 查找库(如果需要)。 - 然后链接到目标。 ```cmake # 查找依赖库,例如 OpenCV find_package(OpenCV REQUIRED) # REQUIRED 表示找不到则报错 # 将库链接到可执行文件 target_link_libraries(main PRIVATE ${OpenCV_LIBS}) # main 是步骤 3 定义的目标 ``` - **说明**:`PRIVATE` 表示链接仅适用于当前目标,不影响其他目标。常用库如 OpenCV 可通过 `find_package` 自动检测路径。 #### 步骤 5: 配置构建类型和其他选项 设置构建类型(如 Debug 或 Release)以优化性能或调试。还可添加编译选项。 - 使用 `set` 设置构建类型。 - 使用 `target_compile_options` 添加编译标志。 ```cmake # 设置默认构建类型为 Debug(开发时)或 Release(发布时) set(CMAKE_BUILD_TYPE Debug) # 可选: Release, RelWithDebInfo # 添加编译选项,例如启用警告 target_compile_options(main PRIVATE -Wall -Wextra) # -Wall 启用所有警告 ``` - **说明**:构建类型影响优化级别;Debug 包含调试信息,Release 优化性能。编译选项如 `-Wall` 可提升代码质量[^2]。 #### 完整示例 CMakeLists.txt 文件 以下是一个简单的 CMakeLists.txt 示例,适用于一个包含主文件C++ 项目: ```cmake # 步骤 1: 设置 CMake 版本和项目 cmake_minimum_required(VERSION 3.10) project(SimpleApp VERSION 1.0 LANGUAGES CXX) # 步骤 2: 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 步骤 3: 添加可执行文件 add_executable(app main.cpp) # 假设 main.cpp 在项目根目录 # 步骤 4: 链接库(此处无外部库,省略) # target_link_libraries(app PRIVATE some_lib) # 步骤 5: 配置构建类型 set(CMAKE_BUILD_TYPE Debug) target_compile_options(app PRIVATE -Wall) ``` #### 构建和运行项目 1. 在项目根目录创建 `build` 文件夹:`mkdir build && cd build` 2. 运行 CMake:`cmake ..` (生成 Makefile) 3. 编译项目:`make` 4. 运行可执行文件:`./app` #### 总结 编写 CMakeLists.txt 文件的核心是定义项目结构、设置 C++ 标准、添加目标和链接库。通过以上步骤,您可以从无到有创建高效的构建配置[^1]。记住,CMake 语法强调模块化,复杂项目可拆分为多个 CMakeLists.txt 文件(如子目录中使用 `add_subdirectory`)。实践时,参考 CMake 官方文档可解决进阶问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值