要编译一个已有 CMakeLists.txt 文件的 C++ 项目,你需要按照以下步骤进行操作:

CMake 和 make

1. 确保安装了 CMake 和编译工具

首先,确保你的系统已经安装了 CMake 和适当的 C++ 编译工具。具体取决于你的操作系统,下面是一些常见的安装方式:

  • Windows:安装 CMakeVisual StudioMinGW(如果你使用的是命令行编译器)。
  • Linux/Mac:可以通过包管理器安装 CMakeg++ 编译器:
    • Linux: sudo apt-get install cmake g++
    • macOS: brew install cmake(如果使用 Homebrew)

2. 创建构建目录

通常我们不直接在项目的根目录中进行构建,而是创建一个单独的构建目录,这样可以保持项目目录的整洁。

在项目的根目录下,执行以下命令:

1
2
mkdir build
cd build

3. 运行 CMake 配置项目

在构建目录中,使用 cmake 命令来配置项目。这会生成平台特定的构建文件(如 Makefile 或 Visual Studio 工程文件)。你可以指定源代码的目录(即 CMakeLists.txt 文件所在的目录)。

假设 CMakeLists.txt 文件在上级目录,你可以运行以下命令:

1
cmake ..

这个命令会让 CMake 读取上级目录中的 CMakeLists.txt 文件,并生成相应的构建配置。如果没有问题,CMake 会自动检测到编译工具链并设置好相关构建配置。

如果你想指定编译器或者生成不同的构建文件格式(例如使用 Visual Studio 或者 Ninja),可以使用 -G 选项:

1
2
3
4
5
cmake .. -G "Visual Studio 16 2019"  # 如果你使用 Visual Studio 2019
# 或者
cmake .. -G "Ninja" # 如果你使用 Ninja 作为构建工具
# 或者
cmake .. -G "NMake Makefiles" # 如果你使用 MinGW

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 *

总结步骤

  1. 创建 build 目录:mkdir build && cd build
  2. 运行 cmake .. 配置项目。
  3. 使用 makeninja 或者 Visual Studio 等工具进行编译。
  4. 执行生成的可执行文件。

配置编译器

直接使用 cmake 命令可能失败,因为 cmake 找不到默认的编译器,这时需要指定编译器。

可以在运行 CMake 时指定 MinGW 编译器。使用 -D 参数设置 CMAKE_C_COMPILERCMAKE_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 实际安装路径调整上述路径。

你也可以通过设置环境变量 CCCXX 来指定编译器:

1
2
3
set CC=D:/mingw64/bin/gcc.exe
set CXX=D:/mingw64/bin/g++.exe
cmake .. -G "MinGW Makefiles"

如果你想让这个设置持久化,可以将编译器路径添加到你的 CMake 设置文件中:

1
2
3
4
5
6
7
8
9
{
"cmake.sourceDirectory": "D:/Code/GitHub/hello-algo/codes/cpp",
"cmake.cmakePath": "D:/software/CMake/cmake-3.31.0-windows-x86_64/bin/cmake.exe",
"cmake.configureSettings": {
"CMAKE_C_COMPILER": "D:/mingw64/bin/gcc.exe",
"CMAKE_CXX_COMPILER": "D:/mingw64/bin/g++.exe"
},
"cmake.generator": "MinGW Makefiles"
}

记得替换为你系统中 MinGW 的实际安装路径。

如果指定生成器失败,可以用 cmake .. -G "NMake Makefiles" 来指定生成器。

在项目根目录下运行 cmake --list-generators 可以查看所有可用的生成器。能看到默认的生成器。