cmakelists.txt必须包含cmake_minimum_required、project和add_executable三行基础指令,还需指定c++标准、启用警告,并按规范配置构建目录;多源文件推荐显式列出或用set定义sources变量。

要让C++源码被正确编译、链接并生成可执行文件,CMakeLists.txt必须声明项目名称、语言标准、源文件路径和构建目标,缺一不可,否则cmake命令会报错退出。
创建最简CMakeLists.txt
新建一个名为CMakeLists.txt的纯文本文件,放在项目根目录(即main.cpp所在目录)。
用任意文本编辑器打开,写入以下三行内容:
cmake_minimum_required(VERSION 3.10)
project(MyApp)
add_executable(MyApp main.cpp)
这三行是最低限度:第一行声明CMake最低版本要求;第二行定义项目名,也作为生成的可执行文件名;第三行告诉CMake“把main.cpp编译成叫MyApp的程序”。
指定C++标准并启用警告
在project(MyApp)下方插入两行:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
第一行设定使用C++17语法;第二行强制要求编译器严格遵守该标准——【不加这一行,某些旧编译器可能悄悄降级到C++98,导致std::optional等新特性无法编译】。
再追加一行:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
这会让编译器开启全部常规警告,帮你提前发现未初始化变量、无用代码等问题。
CMake 4.3.2 Windows x86_64 历史版本安装包,适合旧项目兼容、构建环境回退、CMakeLists.txt 迁移验证、Visual Studio/Ninja/Makefile 生成器测试和 C/C++ 项目维护。
添加多个源文件
当项目包含多个.cpp文件时,不能逐个列在add_executable里。正确做法是先收集路径,再统一传入:
方法一:显式列出所有文件
add_executable(MyApp main.cpp util.cpp network.cpp)
方法二:用file(GLOB)自动发现(仅适用于简单项目)
file(GLOB SOURCES "*.cpp")
add_executable(MyApp ${SOURCES})
【注意:GLOB不会自动检测新增文件,修改后需手动删除build目录重新cmake,否则新.cpp不会被加入编译】
方法三:推荐用于中大型项目
set(SOURCES
main.cpp
util.cpp
network.cpp
)
add_executable(MyApp ${SOURCES})
配置构建目录并运行
第一步:在项目根目录外新建一个build子目录
mkdir build
第二步:进入build目录
cd build
第三步:执行cmake命令,指向上级目录(即含CMakeLists.txt的位置)
cmake ..
第四步:生成可执行文件
cmake --build .
这四步必须按顺序执行,【不能在项目根目录直接运行cmake .,否则生成的临时文件会污染源码树】。执行完后,build目录下会出现MyApp可执行文件。










