【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 是一个更高层面的工具,从而为其实现跨平台提供了可能

posted @ 2024-06-12 13:33  蔡不菜和他的uU们  阅读(13)  评论(0编辑  收藏  举报