cmakelist.txt 执行cmake时生成的所有文件都到build目录项,该怎么改cmakelist
时间: 2025-05-09 14:12:23 浏览: 28
为了让 `CMakeLists.txt` 在执行 CMake 时将所有生成的文件都放到 `build` 目录下,我们需要确保以下几点:
1. **统一输出路径**:将所有的编译、链接等生成的结果集中管理在一个单独的输出目录中。
2. **分离源码与构建**:避免在源代码目录内进行构建操作,推荐在外围创建一个专门用于存放构建产物的新目录(比如 `build`),并在该目录下调用 CMake 和构建工具。
以下是修改后的 `CMakeLists.txt` 文件示例及说明:
```cmake
# 定义所需最低版的 CMake 版本
cmake_minimum_required(VERSION 3.0.0)
# 设置项目名称和版本号
project(yubao_yd_Demo VERSION 0.1.0)
# 设置默认的 C++ 标准及其他全局选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)
# 统一设置所有类型的输出路径为构建根目录下的相应子文件夹
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
endif()
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
endif()
if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
endif()
# 包含测试框架 (如果需要的话),并启用单元测试功能
include(CTest)
enable_testing()
# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加库文件链接路径
link_directories(${PROJECT_SOURCE_DIR}/linux64)
# 收集 src 目录里的所有 .cpp/.c 等源文件到 SRC 变量里
aux_source_directory(src SRC)
# 创建名为 ‘${PROJECT_NAME}’ 的可执行程序,并使用上面收集好的源文件进行编译
add_executable(${PROJECT_NAME} ${SRC})
# 关联目标可执行文件与第三方静态/共享库
target_link_libraries(${PROJECT_NAME} yd)
# 使用 CPack 准备分发包的相关信息
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
# 复制资源文件夹内的内容到构建目录中去
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/${PROJECT_NAME}/config_files
${CMAKE_BINARY_DIR}/config_files
)
```
### 主要改动说明:
- **输出路径控制**:我们利用了条件判断来确定如果没有显式定义这些输出路径,则自动指向 `${CMAKE_BINARY_DIR}` 下对应的子文件夹。这种方式不仅简化了配置过程,还提高了灵活性——用户可以根据自身需求随时覆盖这些默认值而不必更改主脚本。
- **`CMAKE_BINARY_DIR`宏变量的应用**:它代表的是当前正在工作的二进制目录,即运行 cmake 后所处的位置,默认就是你指定的 build 路径。
除了上述对 `CMakeLists.txt` 的改进外,在实际的操作流程上也要注意正确的做法。通常情况下应先切换至一个新的空闲文件夹作为我们的“构建”区域,然后在这个新的环境中初始化整个项目的构造过程:
```bash
$ mkdir build && cd build
$ cmake ..
$ make
```
这样做能够有效防止意外修改原始工程结构的同时也便于清理不必要的中间件产品。
阅读全文
相关推荐


















