【CMake系列】02-第一个CMake项目
本节我们用CMake 构建我们的第一个helloword的项目,从更细的粒度上了解CMake在做什么,对编写CMakeLists.txt 进入初步引入
本专栏的实践代码全部放在 github 上,欢迎 star !!!
如有问题,欢迎留言、或加群【392784757】交流
准备
hello-cmake.cpp 代码内容
#include <cstdlib>
#include <iostream>
#include <string>
std::string say_hello() { return std::string("hello CMake world!"); }
int main()
{
std::cout << say_hello() << std::endl;
return EXIT_SUCCESS;
}
配套的CMakeLists.txt 内容如下
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
set(CMAKE_CXX_STANDARD 17)
project(01-hello-cmake LANGUAGES CXX)
message("hello cmake!")
add_executable(hello-world hello-world.cpp)
基础框架
cmake_minimum_required(VERSION 3.5 FATAL_ERROR) # cmake 版本要求
set(CMAKE_CXX_STANDARD 17)
project(project_name LANGUAGES CXX)
# 其他配置
# 路径配置 include路径 link路径
# 构建目标
# 目标属性设置
# ...
执行操作
配置过程
cmake -B build -S .
构建过程
cmake --build build
遇到报错,检查代码和CMakeLists.txt,有时候需删除缓存 即删除build 文件夹,重新执行
分步执行【更细粒度】
针对linux/windows nmake 来测试,windows vs 无法执行
cmake程序分步生成、指定项目和清理
cmake -B nmake -S . -G "NMake Makefiles" # 配置
cmake --build . --target help
cmake --build . --target 101first_cmake.i # 预处理
cmake --build . --target 101first_cmake.s # 编译 .s
cmake --build . --target 101first_cmake.o # 汇编 .o
cmake --build hello-world # 链接
# 运行 动态库加载路径
.\hello-cmake
# 或
.\hello-cmake.exe
cmake --build . --target clean # 清理
从上面的例子,也可以看到,cmake 是一个 构建系统 指导工具,通过 cmake 指令 来调用构建系统(编译器,链接器等等),完成项目的构建(包括预处理、编译、链接,甚至清理等),在这个过程中,基本看不到编译器等相关命令,但实际上cmake 调用了它们,因此也可以看出 cmake 是一个更高层面的工具,从而为其实现跨平台提供了可能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了