【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 是一个更高层面的工具,从而为其实现跨平台提供了可能
【CMake系列】02-第一个CMake项目的更多相关文章
- ReactNative新手学习之路02第一个RN项目
开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...
- 3. CMake 系列 - 分模块编译&安装项目
目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 测试模块 2.4 顶层 CMakeLists.txt 3. 编译 & 安装 4. 项目安装基本语法 ...
- Cordova 系列之创建一个iOS项目
1.打开终端 2.输入命令 $ cd Desktop (PS:Desktop表示放在桌面,你可以选择放任意位置) 3.$ cordova create HelloWorld com.example. ...
- Vue系列——如何运行一个Vue项目
声明 本文转自:如何运行一个Vue项目 正文 一开始很多刚入手vue.js的人,会扒GitHub上的开源项目,但是发现不知如何运行GitHub上的开源项目,很尴尬.通过查阅网上教程,成功搭建好项目环境 ...
- Redux系列02:一个炒鸡简单的react+redux例子
前言 在<Redux系列01:从一个简单例子了解action.store.reducer>里面,我们已经对redux的核心概念做了必要的讲解.接下来,同样是通过一个简单的例子,来讲解如何将 ...
- Google C++测试框架系列入门篇:第二章 开始一个新项目
上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...
- CMakeList.txt(3): 一个cmake实例
介绍一个比较实用的例子,即包含生成静态库又包含引入外部头文件和链接库的cmake demo. 先按照工程规范建立工程目录,并编写代码,以下面的工程目录为例进行解释这个例子,工程的目录结构为: 1. 编 ...
- CMake入门之创建一个基于PCL的最小工程
最近在学习PCL,借助Cmake可省去繁琐的添加包含目录和依赖库操作. 一个典型的CMakeLists.txt内容通常为: cmake_minimum_required(VERSION 2.6 FAT ...
- WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
- Cordova入门系列(二)分析第一个helloworld项目 转发 https://www.cnblogs.com/lishuxue/p/6015420.html
Cordova入门系列(二)分析第一个helloworld项目 版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了如何创建一个cordova android项目,这章我们介绍一下创建的 ...
随机推荐
- Linux安全审计之audit安装与使用
场景 安全最重要的一步是内部安全,如何监控用户的行为是一个永恒不变的话题. audit可以详细监控用户的行为,详细到查看或修改了某个文件.这些都可以在日志中查看到. 安装 小贴士: CentOS默认已 ...
- 缩小50%,Mini版T3/A40i核心板,让您的设备更小巧!
小尺寸核心板给用户带来何种价值? 创龙科技常收到用户对于小尺寸核心板的需求反馈,尤其在电力数据采集器.电力DTU.电力通讯管理机.运动控制器.工业HMI.工业网关等工业设备中. 小尺寸核心板3大优势将 ...
- hadoop集群配置文件
配置文件与功能对应: 修改core-site.xml文件 <property> <name>fs.defaultFS</name> <!--配置hdfs系统的 ...
- 【Hive报错】java.lang.NoSuchMethodError(com.facebook.fb303.FacebookService$Client.sendBaseOneway
Hive2.3版本 Hadoop2.7版本 执行hive命令报错: 报错内容: CONSOLE#21/03/24 17:32:54 ERROR ql.Driver: FAILED: Hive Inte ...
- Oracle 存储过程 捕获异常
1.带参数插入并带返回值,异常信息 CREATE OR REPLACE PROCEDURE test_pro (v_id in int,v_name in varchar2,app_code out ...
- 洛谷P2430
还是很容易能看出来是01背包 #include<iostream> #include<utility> using namespace std; typedef long lo ...
- C# 一维数组与二维数组相互转换
class Program { static void Main(string[] args) { double[] a = { 1, 2, 3, 4, 5, 6 }; double[,] b = R ...
- StringBuilder,一种可变的string
StringBuilder 是 Java 中用于操作字符串的可变对象.它允许在字符串中进行修改.添加.删除字符等操作,而不会像普通的字符串操作(例如使用 String 类)那样产生新的字符串对象.这种 ...
- windows10使用scp命令
windows10使用scp命令 windows自带scp命令 windows上传文件到linux//使用方法:scp 源文件路径 账户@地址:目的路径scp C:\Users\zbh\Deskt ...
- Fiddler使用界面介绍-工具栏
Fiddler工具栏介绍 1.备注 选择一个或多个请求后点击[备注]图标,可批量给请求添加备注显示在"Comments"一列 2.Replay 选择一个或多个请求后点击[Repla ...