051-使用cmake编译项目
要编译一个已有 CMakeLists.txt
文件的 C++ 项目,你需要按照以下步骤进行操作:
CMake 和 make
1. 确保安装了 CMake 和编译工具
首先,确保你的系统已经安装了 CMake
和适当的 C++ 编译工具。具体取决于你的操作系统,下面是一些常见的安装方式:
- Windows:安装 CMake 和 Visual Studio 或 MinGW(如果你使用的是命令行编译器)。
- Linux/Mac:可以通过包管理器安装
CMake
和g++
编译器:- Linux:
sudo apt-get install cmake g++
- macOS:
brew install cmake
(如果使用 Homebrew)
- Linux:
2. 创建构建目录
通常我们不直接在项目的根目录中进行构建,而是创建一个单独的构建目录,这样可以保持项目目录的整洁。
在项目的根目录下,执行以下命令:
1 | mkdir build |
3. 运行 CMake 配置项目
在构建目录中,使用 cmake
命令来配置项目。这会生成平台特定的构建文件(如 Makefile 或 Visual Studio 工程文件)。你可以指定源代码的目录(即 CMakeLists.txt
文件所在的目录)。
假设 CMakeLists.txt
文件在上级目录,你可以运行以下命令:
1 | cmake .. |
这个命令会让 CMake 读取上级目录中的 CMakeLists.txt
文件,并生成相应的构建配置。如果没有问题,CMake 会自动检测到编译工具链并设置好相关构建配置。
如果你想指定编译器或者生成不同的构建文件格式(例如使用 Visual Studio 或者 Ninja),可以使用 -G
选项:
1 | cmake .. -G "Visual Studio 16 2019" # 如果你使用 Visual Studio 2019 |
4. 编译项目
一旦 CMake 配置完毕,接下来可以进行编译:
如果你使用的是 Makefile,可以运行:
1
make
如果你使用的是 Visual Studio,你可以直接打开生成的
.sln
文件并通过 Visual Studio 编译,或者在命令行中使用MSBuild
:1
msbuild your_project.sln
如果你使用的是 Ninja,可以直接运行:
1
ninja
5. 运行程序
编译成功后,生成的可执行文件会放在构建目录中(具体位置取决于 CMakeLists.txt
配置)。你可以运行它:
在 Linux/macOS 中,执行:
1
./your_executable
在 Windows 中,执行:
1
your_executable.exe
6. 清理构建文件(可选)
如果你想清理构建目录并重新构建,可以使用以下命令:
使用 CMake 清理构建文件:
1
cmake --build . --target clean
或者直接删除构建目录中的文件:
1
rm -rf *
总结步骤
- 创建
build
目录:mkdir build && cd build
- 运行
cmake ..
配置项目。 - 使用
make
、ninja
或者 Visual Studio 等工具进行编译。 - 执行生成的可执行文件。
配置编译器
直接使用 cmake
命令可能失败,因为 cmake
找不到默认的编译器,这时需要指定编译器。
可以在运行 CMake 时指定 MinGW 编译器。使用 -D
参数设置 CMAKE_C_COMPILER
和 CMAKE_CXX_COMPILER
变量。假设你的 MinGW 安装在默认位置,命令如下:
1 | cmake .. -G "MinGW Makefiles" -D CMAKE_C_COMPILER=gcc -D CMAKE_CXX_COMPILER=g++ |
如果需要指定 MinGW 的完整路径(推荐这样做以避免路径问题),可以这样写:
1 | cmake .. -G "MinGW Makefiles" -D CMAKE_C_COMPILER="D:/mingw64/bin/gcc.exe" -D CMAKE_CXX_COMPILER="D:/mingw64/bin/g++.exe" |
请根据你的 MinGW 实际安装路径调整上述路径。
你也可以通过设置环境变量 CC
和 CXX
来指定编译器:
1 | set CC=D:/mingw64/bin/gcc.exe |
如果你想让这个设置持久化,可以将编译器路径添加到你的 CMake 设置文件中:
1 | { |
记得替换为你系统中 MinGW 的实际安装路径。
如果指定生成器失败,可以用 cmake .. -G "NMake Makefiles"
来指定生成器。
在项目根目录下运行 cmake --list-generators
可以查看所有可用的生成器。能看到默认的生成器。