CMake项目源文件与头文件管理
引言
在CMake项目中,有效地组织和管理源文件(.cpp)与头文件(.h)是构建过程的关键部分。虽然aux_source_directory命令可以方便地收集指定目录下的所有源文件,但它不会包含头文件。本文将介绍如何使用FILE(GLOB)和source_group等命令,来灵活地添加和管理项目中的所有源代码文件,并优化其在IDE(如Visual Studio)中的显示结构。
基础:添加项目根目录下的所有源文件
对于简单的项目结构,我们可以使用FILE(GLOB)命令来匹配并收集所有符合特定模式的源文件。
项目结构
MyProject/
├── CMakeLists.txt
├── main.cpp
└── stdafx.h
CMakeLists.txt 配置
# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 定义项目名称
project(MyProject)
# 使用GLOB模式匹配当前目录下的所有.cpp和.h文件
file(GLOB SOURCES "*.cpp" "*.h")
# 创建可执行文件,并指定所有源文件
add_executable(${PROJECT_NAME} ${SOURCES})
此配置会自动将main.cpp和stdafx.h添加到构建目标中。
进阶:管理第三方或模块化代码
当项目包含第三方库或按功能模块划分代码时,将所有文件混在一起会显得杂乱。更好的做法是将它们组织到独立的子目录中。
项目结构
MyProject/
├── CMakeLists.txt
├── main.cpp
├── stdafx.h
└── third_party/
└── md5/
├── md5.cpp
└── md5.h
CMakeLists.txt 配置
# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 定义项目名称
project(MyProject)
# 手动指定主程序源文件
set(MAIN_SOURCES
main.cpp
stdafx.h
)
# 手动指定第三方MD5库的源文件
set(MD5_SOURCES
./third_party/md5/md5.cpp
./third_party/md5/md5.h
)
# 创建可执行文件,组合主程序和第三方库的源文件
add_executable(${PROJECT_NAME} ${MAIN_SOURCES} ${MD5_SOURCES})
通过set命令,我们可以精确地控制哪些文件被包含在构建中,即使它们位于不同的目录。
优化:在IDE中创建源码分组
虽然文件在物理上已经分目录存放,但在Visual Studio等IDE的解决方案资源管理器中,它们可能仍然显示在一个平级的列表中。使用source_group命令可以为这些文件创建逻辑分组,使项目结构更加清晰。
CMakeLists.txt 配置(优化后)
# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 定义项目名称
project(MyProject)
# 手动指定主程序源文件
set(MAIN_SOURCES
main.cpp
stdafx.h
)
# 手动指定第三方MD5库的源文件
set(MD5_SOURCES
./third_party/md5/md5.cpp
./third_party/md5/md5.h
)
# 为MD5源文件在VS解决方案中创建一个名为"ThirdParty\\MD5"的分组
source_group("ThirdParty\\MD5" FILES ${MD5_SOURCES})
# 创建可执行文件
add_executable(${PROJECT_NAME} ${MAIN_SOURCES} ${MD5_SOURCES})
在上述配置中,source_group("ThirdParty\\MD5" FILES ${MD5_SOURCES})这行代码的作用是,在生成的Visual Studio解决方案中,将md5.cpp和md5.h归类到"ThirdParty"下的"MD5"子文件夹中。请注意,修改CMakeLists.txt后,Visual Studio通常需要重新加载解决方案才能应用这些更改。