Constructing C++ Projects via CMake on Windows in git bash

1. Installing CMake

2. Building Source Code Files
hello.cc
#include <iostream>
#include "spdlog/spdlog.h"
int main(void)
{
    spdlog::info("Welcome to spdlog!");
    std::cout << "Hello World!" << std::endl;
    return 0;
}
3. Building CMakeLists.txt File
# 指定CMake最低版本
cmake_minimum_required(VERSION 3.10)

# 必须在项目名称前指定C++编译器
set (CMAKE_CXX_COMPILER "g++.exe")

# 指定项目名称和使用的编程语言
project(MyProject LANGUAGES CXX)

# 添加spdlog目录,让spdlog可用
add_subdirectory(third_party/spdlog)

# 指定C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 指定生成的可执行文件及对应的源文件
add_executable(my_app main.cc)

# 使用spdlog头文件模式
target_link_libraries(my_app PRIVATE spdlog::spdlog_header_only)


4. Building Project
# 1. 配置项目(生成 Makefile 或 Ninja 文件)

# -G "MinGW Makefiles" 指定使用MinGW而不是Windows默认的nmake,
# 当然要提前安装MinGW到C:/MinGW安装路径不要有空格否则可能报错
# 且C:/MinGW/bin要放到Windows的环境路径上
# -G Ninja 指定使用Ninja,同样Ninja也需要提前准备好
# -B build -S . 即 -S <path-to-source> -B <path-to-build>
cmake -B build -S . -G "Ninja"
# 2. 编译项目 cmake --build build

# 3. 编译项目
time cmake --build build

5. 注意事项

  • Windows 不能用MinGW 的g++和cmake来编译spdlog,因为会报线程错误。
  • 在Windows上必须使用MSYS2里面的g++工具C:\msys64\ucrt64,否则编译的时候首先会产生线程相关的编译错误。
  • 把C:\msys64\ucrt64加到Windows环境Path里面。

6. 项目Tree结构如下



Comments