C++项目中使用CMake编译
C++项目中使用CMake管理头文件的方法
在C++项目里,为了让代码组织更合理、管理更便捷,一般会把头文件(.h或者.hpp文件)和源文件(.cpp文件)分开存放。把头文件存于include文件夹中,是一种常见且值得推荐的做法。下面为你介绍在使用CMake构建项目时,将头文件放在include文件夹下并正确引用它们的具体步骤:
1. 创建项目结构
首先,要搭建一个合理的项目结构。示例如下:
MyProject/
|-- include/
| |-- MyHeader.h
|-- src/
| |-- main.cpp
| |-- OtherSourceFile.cpp
|-- CMakeLists.txt
2. 编写CMakeLists.txt
在CMakeLists.txt文件中,你得设置好包含头文件目录的路径,同时告知CMake该如何编译源文件。
cmake_minimum_required(VERSION 3.10)
project(MyProject)# 设置C++标准,例如C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)# 指定头文件和源文件目录
include_directories(include) # 包含头文件目录# 列出所有的源文件
set(SOURCE_FILESsrc/main.cppsrc/OtherSourceFile.cpp
)# 添加可执行文件
add_executable(MyProject ${SOURCE_FILES})
3. 引用头文件
头文件定义参考
#ifndef MATH_H
#define MATH_Hint add(const int &, const int &);#endif
在源文件里引用头文件时,要采用相对路径,或者借助之前在include_directories中指定的路径。比如,在main.cpp中引用MyHeader.h:
#include "MyHeader.h" // 使用引号是因为路径是相对的,指向include目录下的文件
4. 构建项目
在项目的根目录(也就是包含CMakeLists.txt的目录)打开终端或命令提示符,运行下面的命令来配置和构建项目:
mkdir build # 创建一个build目录用于存放构建文件
cd build # 进入build目录
cmake .. # 配置项目,使用当前目录的CMakeLists.txt文件生成Makefile等构建文件
make # 编译项目,生成可执行文件(或在Windows上使用cmake --build .)
如何构建指定的可执行文件
当CMakeLists.txt中有多个add_executable命令,像这样:
add_executable(MyExecutable main.cpp math.cpp)
add_executable(test test.cpp math.cpp)
若要构建指定的可执行文件,有以下两种方法:
方法一:使用–target参数(推荐)
cmake --build . --target MyExecutable # 构建MyExecutable
cmake --build . --target test # 构建test
方法二:使用make target(适用于Unix Makefiles)
make MyExecutable # 构建MyExecutable
make test # 构建test
注意事项
- 要保证在include_directories中指定的路径是相对于当前CMakeLists.txt文件的。要是include目录不在同一层级,可能就需要调整路径或者使用绝对路径。例如,当项目结构更深时,可能要写成:
include_directories(${CMAKE_SOURCE_DIR}/some/path/include)
- 从CMake 3.10版本开始,推荐使用target_include_directories来替代include_directories,这样能够更精准地控制哪些目标(例如库或可执行文件)包含这些目录。示例如下:
add_executable(MyProject ${SOURCE_FILES})
target_include_directories(MyProject PRIVATE include) # PRIVATE表示仅该目标需要这些目录,不会传播到链接的其他目标。
使用这种方法能够避免在全局范围内设置不必要的包含目录。