CMake常用示例

常用示例

入门
Hello CMake
CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。

├── CMakeLists.txt # 希望运行的 CMake命令
├── main.cpp # 带有main 的源文件
├── include # 头文件目录
│ └── header.h
└── src # 源代码目录
├── a.c
└── b.c
在此项目上运行 CMake 时,系统会要求您提供二进制目录,运行 CMake 不会创建最终的可执行文件,而是会为 Visual Studio、XCode 或 makefile 生成项目文件。 使用这些工具构建该项目

CMakeLists.txt

设置可以使用的最低 CMake 版本

cmake_minimum_required(VERSION 3.5)

设置项目名称

project (hello_cmake)

添加可执行文件

add_executable(hello_cmake main.cpp)

添加头文件目录

target_include_directories(hello_cmake PRIVATE ./include)

批量添加源文件

file(GLOB SRCS CONFIGURE_DEPENDS ./src/*.cpp)
target_sources(hello_cmake PUBLIC ${SRCS})

添加第三方库

find_package(OpenGL CONFIG REQUIRED)

链接第三方库

target_link_libraries(hello_cmake PRIVATE OpenGL)

指定输出路径

set_property(TARGET hello_cmake ${CMAKE_SOURCE_DIR}/bin)

main.cpp
#include

int main(int argc, char *argv[])
{
std::cout << “Hello CMake!” << std::endl;
return 0;
}
编译示例
$ mkdir build # 创建 build 目录
$ cd build # 进入目录
$ cmake … # 目录的上一级目录运行命令
$ make # 使用对应的编译工具
$ ./hello_cmake # 运行生成的 hello_cmake
Hello CMake!
cmake
生成项目构建系统

$ cmake [] <path-to-source | path-to-existing-build>bash
$ cmake [] -S -B
建立一个项目

$ cmake --build

[] [-- ]
安装项目

$ cmake --install

[]
运行指定项目

cmake --build

--target
打开一个项目

$ cmake --open


运行脚本

$ cmake [-D =]… -P
运行命令行工具

$ cmake -E []
运行查找包工具

$ cmake --find-package []
运行工作流预设

$ cmake --workflow []
查看帮助

$ cmake --help[-]
常用参数
方式一: 在CMakeLists.txt中使用set(KEY VAL)函数
方式二: 在执行cmake … -D 指定(只需一次,推荐)

指定编译参数(Debug/Release/MinSizeRel/RelWithDebInfo)

$ cmake … -D CMAKE_BUILD_TYPE=DEBUG

指定编译链工具(windows下vcpkg需要)

$ cmake … -D CMAKE_TOOLCHAIN_FILE=<vcpkg_path>/scripts/buildsystems/vcpkg.cmake

指定编译器

$ cmake … -D CAMKE_C_COMPILER=…
$ cmake … -D CAMKE_CXX_COMPILER=…

指定生成器

$ cmake … -G “Unix Makefile”
$ cmake … -G “Ninja”
$ cmake … -G “Visual Studio 17 2022”

设置Cpp标准

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 在检测到不支持时出错
set(CMAKE_CXX_EXTENSIONS ON) #一般设为off,否则在msvc上没有特性会出错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录】day32

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、122买卖股票的最佳时机II二、55跳跃游戏三、45跳跃游戏II 一、122买卖股票的最佳时机II 方法1:计算斜率大于0的线段的diffY class Solution { public:int max…

Redis改造原始代码

基础篇Redis 5.2.2.改造原始代码 代码说明: 1.在我们完成了使用工厂设计模式来完成代码的编写之后&#xff0c;我们在获得连接时&#xff0c;就可以通过工厂来获得。 &#xff0c;而不用直接去new对象&#xff0c;降低耦合&#xff0c;并且使用的还是连接池对象。 2.当我们…

FreeROST作业day2

1.总结串口的发送和接收功能使用到的函数 串口发送数据函数&#xff1a; HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); UART_Handle…

C语言经典例题(16) --- 按照格式输入并交换输出、计算机表达式的值、能活多少秒、喝酸奶、竞选社长

1.按照格式输入并交换输出 题目描述: 输入两个整数&#xff0c;范围-231~231-1&#xff0c;交换两个数并输出。 输入描述: 输入只有一行&#xff0c;按照格式输入两个整数&#xff0c;范围&#xff0c;中间用“,”分隔。 输出描述: 把两个整数按格式输出&#xff0c;中间用“…

【LeetCode】热题100:排序链表

题目&#xff1a; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] …

linux进程fork函数的讲解。

通过指令,查看接口的详细信息 man forkOn success, the PID of the child process is returned in the parent, and 0 is returned in the child. On failure, -1 is returned in the parent, no child process is created, and errno is set appropriately. 这里的返回值的意…

【Java笔记】Lambda表达式

文章目录 回顾下InterfaceWhy InterfaceInterface例子需求实现需求 Lambda表达式Why LambdaLambda表达式Lambda表达式实现send()无参数的抽象方法有参数的抽象方法多参数、有返回值的抽象方法赋值给变量Email or SMS&#xff1f; Lambda表达式的限制Reference Lambda表达式是Ja…

FPGA设计_加法器

文章目录 前言补充&#xff1a;各种门电路符号一、半加器二、全加器三、串行进位加法器3.1、verilog代码设计 四、超前进位加法器4.1、verilog代码设计 五、进位链CARRY4 前言 在之前一篇介绍7系列FPGA底层资源的时候&#xff0c;我们提到过每一个slice当中有一个CARRY4&#…

NodeJS 基础入门学习手册

什么是 Node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Google 的 V8 引擎&#xff0c;V8 引擎执行 Javascript 的速度非常快…

玫瑰图和雷达图(自备)

目录 玫瑰图 数据格式 绘图基础 绘图升级&#xff08;文本调整&#xff09; 玫瑰图 下载数据data/2020/2020-11-24 mirrors_rfordatascience/tidytuesday - 码云 - 开源中国 (gitee.com) R语言绘图—南丁格尔玫瑰图 - 知乎 (zhihu.com) 数据格式 rm(list ls()) libr…

2024年新算法-冠豪猪优化算法(CPO),CPO-RF-Adaboost,CPO优化随机森林RF-Adaboost回归预测-附代码

冠豪猪优化算法&#xff08;CPO&#xff09;是一种基于自然界中猪群觅食行为启发的优化算法。该算法模拟了猪群在寻找食物时的集群行为&#xff0c;通过一系列的迭代过程来优化目标函数&#xff0c;以寻找最优解。在这个算法中&#xff0c;猪被分为几个群体&#xff0c;每个群体…

CA根证书——https安全保障的基石

HTTPS通信中&#xff0c;服务器端使用数字证书来证明自己的身份。客户端需要验证服务器发送的证书的真实性。这就需要一个可信的第三方机构&#xff0c;即CA&#xff0c;来颁发和管理证书。CA根证书是证书颁发机构层次结构的顶级证书&#xff0c;客户端信任的所有证书都可以追溯…

[lesson01]学习C++的意义

学习C的意义 C语言特点 C语言是在实践的过程中逐步完善起来的 没有深思熟路的设计过程残留量过多低级语言的特征 C语言的目标是高效 最终程序执行效率的高效 软件方法论的发展 面相过程程序设计&#xff1a;数据结构 算法 主要解决科学计算问题&#xff0c;用户需求简单而…

python实现泊松回归

1 什么是基于计数的数据&#xff1f; 基于计数的数据包含以特定速率发生的事件。发生率可能会随着时间的推移或从一次观察到下一次观察而发生变化。以下是基于计数的数据的一些示例&#xff1a; 每小时穿过十字路口的车辆数量每月去看医生的人数每月发现的类地行星数量 计数数…

行车记录打不开?别慌,数据恢复有高招!

行车记录打不开&#xff0c;这恐怕是许多车主都曾经遭遇过的烦恼。在驾驶途中&#xff0c;行车记录仪本应是记录美好瞬间、保障行车安全的重要工具&#xff0c;但一旦它出现打不开的情况&#xff0c;所有的期待与信赖便瞬间化为乌有。面对这种情况&#xff0c;我们该如何应对&a…

web学习笔记(五十一)

目录 1. post请求和get请求的区别 2. CORS 跨域资源共享 2.1 什么是同源 2.2 什么是同源策略 2.3 如何实现跨域资源共享 2.4 使用 cors 中间件解决跨域问题 2.5 JSONP 接口 2.6 实现 JSONP 接口的步骤 1. post请求和get请求的区别 传参方式不同&#xff1a;get请求参数…

文本文件操作

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 文件操作 程序运行时&#xff0c;产生的数据都是临时数据&#xff0c;程序一旦运行结束都会被释放。通过文件可以将数据持久化。 C中对文件进行操作需要包含头文件<fstream> 文件…

2024年抖音小店的保证金是多少?真的可以做0元保证金的店铺吗?

大家好&#xff0c;我是电商糖果 2024年想要入驻抖音小店的商家依旧很多&#xff0c;关于小店的保证金问题也有不少人前来咨询。 大家问的最多的是可以开通0元保证金的店铺吗&#xff1f;以及2024年抖音小店保证金是多少&#xff1f; 这里糖果给大家一个个解答。 可以开通0…

Linux 服务service(一)

目录 一、服务入门1.1 概述1.2 创建及管理Systemd服务1.2.1 创建service文件1.2.2 创建脚本文件1.2.3 管理Systemd服务1.2.4 服务输出 1.3 服务文件常用参数1.3.1 UNIT单元1.3.2 service单元1.3.3 install单元 1.4 target文件常用参数1.5 周期性任务timer1.5.1 创建timer文件1.…

第十八章 算法

一、介绍 1.1 什么是算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制。也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获…