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

【CMake系列】02-第一个CMake项目的更多相关文章

  1. ReactNative新手学习之路02第一个RN项目

    开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...

  2. 3. CMake 系列 - 分模块编译&安装项目

    目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 测试模块 2.4 顶层 CMakeLists.txt 3. 编译 & 安装 4. 项目安装基本语法 ...

  3. Cordova 系列之创建一个iOS项目

    1.打开终端 2.输入命令 $ cd Desktop (PS:Desktop表示放在桌面,你可以选择放任意位置) 3.$  cordova create HelloWorld com.example. ...

  4. Vue系列——如何运行一个Vue项目

    声明 本文转自:如何运行一个Vue项目 正文 一开始很多刚入手vue.js的人,会扒GitHub上的开源项目,但是发现不知如何运行GitHub上的开源项目,很尴尬.通过查阅网上教程,成功搭建好项目环境 ...

  5. Redux系列02:一个炒鸡简单的react+redux例子

    前言 在<Redux系列01:从一个简单例子了解action.store.reducer>里面,我们已经对redux的核心概念做了必要的讲解.接下来,同样是通过一个简单的例子,来讲解如何将 ...

  6. Google C++测试框架系列入门篇:第二章 开始一个新项目

    上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...

  7. CMakeList.txt(3): 一个cmake实例

    介绍一个比较实用的例子,即包含生成静态库又包含引入外部头文件和链接库的cmake demo. 先按照工程规范建立工程目录,并编写代码,以下面的工程目录为例进行解释这个例子,工程的目录结构为: 1. 编 ...

  8. CMake入门之创建一个基于PCL的最小工程

    最近在学习PCL,借助Cmake可省去繁琐的添加包含目录和依赖库操作. 一个典型的CMakeLists.txt内容通常为: cmake_minimum_required(VERSION 2.6 FAT ...

  9. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  10. Cordova入门系列(二)分析第一个helloworld项目 转发 https://www.cnblogs.com/lishuxue/p/6015420.html

    Cordova入门系列(二)分析第一个helloworld项目   版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了如何创建一个cordova android项目,这章我们介绍一下创建的 ...

随机推荐

  1. TRL(Transformer Reinforcement Learning) PPO Trainer 学习笔记

    (1)  PPO Trainer TRL支持PPO Trainer通过RL训练语言模型上的任何奖励信号.奖励信号可以来自手工制作的规则.指标或使用奖励模型的偏好数据.要获得完整的示例,请查看examp ...

  2. Android 自定义带动画的柱状图

    功能分析 假设要使用柱状图展示用户一周的数据,通用的做法是对接三方图表SDK或者自己通过代码绘制. 1.三方SDK通常包体较大,且定制性差,对特定的UI需求兼容性差; 2.自己绘制,比较复杂,而且要考 ...

  3. Freertos学习:03-任务

    --- title: rtos-freertos-03-任务 EntryName: rtos-freertos-03-task date: 2020-06-20 09:15:07 categories ...

  4. 《DNK210使用指南 -CanMV版 V1.0》第三章 CanMV简介

    第三章 CanMV简介 1)实验平台:正点原子DNK210开发板 2) 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.c ...

  5. 详解Web应用安全系列(7)使用具有已知漏洞的组件

    使用具有已知漏洞的组件,这种安全漏洞普遍存在,基于组件开发的模式使得多数开发团队根本不了解其应用或API中使用的组件,更谈不上及时更新这些组件了. 下面就分别以.NET和Java各分享一个案例. .N ...

  6. HTTP常见的状态码?

    100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息 200 OK 正常返回信息 201 Created 请求 ...

  7. 解决方案 | xpdf4.04支持中文pdf识别与转换(pdf提取txt)

    一.下载地址 按照参考链接将xpdf4.04(含有xpdf-chinese-simplified包)已经打包好,下载链接如下: https://www.123pan.com/s/9Rn9-eEQpH. ...

  8. oeasy教您玩转vim - 77 - # 保留环境viminfo

    ​ 保留环境viminfo 回忆组合键映射的细节 上次我们定义了session :mks 还可以加载会话session :source Session.vim vim -S Session.vim 基 ...

  9. 【jQuery学习日记】从入门到再入门

    1,jQuery介绍 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 2,入门jQuery jQuery有两大核心:jQuery核心函数和j ...

  10. Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现

    Vue 根据鼠标悬停目标元素上方显示.隐藏指定元素交互实现 By:授客 QQ:1033553122 开发环境 win10 element-ui  "2.13.1" vue  &qu ...