本节我们用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. spring与设计模式之四适配器模式

    一.定义 适配器模式-或者称为转接口模式,变压器模式.通过适配,可以让原来提供特定功能的对象完成另外一个标准的功能. 所以,所谓的适配应该可以这样称呼:让某些类/接口适配/转换某个标准/功能. 适配器 ...

  2. C++判断当前程序是否运行在Windows展台(Kiosk)模式下

    Windows有一个展台(Kiosk)模式.展台模式可以使Windows作为数字标牌进行使用.具体请参考Windows 展台 配置完展台模式,重启设备后,Windows会以全屏的方式运行展台应用,无法 ...

  3. NXP i.MX 8M Plus工业核心板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

      1 核心板简介 创龙科技SOM-TLIMX8MP是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 + 单核ARM Cortex-M7异构多核处理器设计的高端工业核心板, ...

  4. win10: pyinstaller在python2和python3环境下的适应性配置

    win10:pyinstaller在python2和python3环境下的适应性配置 前言 pyinstaller是一个非常优秀的python可执行程序打包工具,在windows下打包成.exe文件, ...

  5. Centos7安装MySQL详细步骤(配置开机自启)

    MySQL 检查系统是否安装过mysql //检查系统中有无安装过mysql rpm -qa|grep mysql //查询所有mysql 对应的文件夹,全部删除 whereis mysql find ...

  6. 精品 IDEA 插件大汇总!值得收藏

    轻松提高 Java 开发效率 俗话说,工欲善其事,必先利其器.想要提升编程开发效率,必须选择一款顺手的开发工具. 对于 Java 开发者,JetBrains IDEA 无疑是目前最主流的开发工具,既简 ...

  7. PHP7新特性之类型声明

    今天我在这里总结下PHP7主要的新特性. 1.类型声明 做过php开发的小伙伴们都知道,php7以前的版本变量是不需要声明类型的,函数返回值也是不需要声明类型的,总之,在我们的脑海中就没有这么回事.可 ...

  8. TIER 0: Dancing

    TIER 0: Dancing SMB Server Message Block 是一种网络协议,用于在计算机网络上共享文件.打印机和其他资源.它最初由微软开发,用于在 Windows 操作系统之间进 ...

  9. Java 线程池之Jetty 线程池学习总结

    Java 线程池之Jetty 线程池学习总结 前提 Jetty 11.0.x 为什么是Jetty? Java提供4中创建线程池的快捷方式 Executors.newFixedThreadPool(); ...

  10. 13、Spring之JdbcTemplate

    13.1.环境搭建 13.1.1.创建module 13.1.2.选择maven 13.1.3.设置module名称和路径 13.1.4.module初始状态 13.1.5.配置打包方式和依赖 < ...