当前位置:网站首页>cmake 学习使用笔记(一)
cmake 学习使用笔记(一)
2022-07-07 11:26:00 【ly_zszcyx】
目录
set 设置变量-------------------------添加版本号
add_definitions-------------------------添加宏定义
使用工具:
vs 2019, Clion
系统: Windows
参考网址:cmake使用教程(一)-起步 - 掘金
项目设置:
project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [LANGUAGES <language-name>...])
可只设置项目名称:如:
project ("cPulsPlusTestProject")也可设置一下项目描述,项目地址等
project (cPulsPlusTestPrj
VERSION 1.0.0
DESCRIPTION "项目描述:xxxxx"
HOMEPAGE_URL "项目地址,比如:github 地址"
LANGUAGES CXX)注意: 上面代码片段大写的必须大写,否则编译通不过,比如(LANGUAGES CXX, DESCRIPTION 等)
构建程序
使用cmake 来构建程序:
使用 cmake .
构建前:

构建后:

不过我使用 clion 构建的程序一直默认为 vs 2019
构建后:

如果要重新cmake ,需删除 缓存

make
windows下提示make不是内部命令
如果你用MinGW,你的make 叫 mingw32-make
如果你用MSVC,你的make叫 nmake
问题:待解?----已解
cmake . 老是默认为 vs2019
疑似:未理解 cmake 后面的点(.) 是什么意思
经测试应该是路径,确切的应该是 CMakeList.txt 所在位置,所以 我应该是../ 返回上一级

一直使用上一级路径, 所以 cmake 出来 总是默认为 vs 2019 
当我进入mingw 下 ,构建的就不是 vs 2019 环境了:如:

set 设置变量-------------------------添加版本号
set(KEY VALUE)接受两个参数,用来声明变量。在camke语法中使用KEY并不能直接取到VALUE,必须使用${KEY}这种写法来取到VALUE。
设置系统自带的变量
如:C++ 标准
set(cmake_cxx_standard 11)
设置自定义变量
设置自定义的变量,例如:设置头文件搜索路径

CMAKE_CURRENT_SOURCE_DIR
这是当前处理的CMakeLists.txt所在的目录
添加版本号
首先设置两个变量
set (cPlusPlusTest_version_major 1)
set (cPlusPlusTest_version_minor 0)
configure_file(
"${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
"${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
)
在cPlusPlusTestConfig.h.in 中加入
#define cPlusPlusTest_version_major @[email protected]
#define cPlusPlusTest_version_minor @[email protected]

使用
扩展:
configure_file(input output options)
将一个文件(由input参数指定)拷贝到指定位置(由output参数指定),并根据options修改其内容。
configure_file命令一般用于自定义编译选项或者自定义宏的场景。configure_file命令会根据options指定的规则:
- COPYONLY:只拷贝文件,不进行任何的变量替换。这个选项在指定了
NEWLINE_STYLE选项时不能使用(无效)。 - ESCAPE_QUOTES:躲过任何的反斜杠(C风格)转义。
将input文件复制到output文件,并在输入文件内容中的变量,替换引用为@[email protected]或${VAR}的变量值。每个变量引用将替换为该变量的当前值,如果未定义该变量,则为空字符串。
例如:cPlusPlusTestConfig.h.in
1. 定义 CMakeList.txt
set (cPlusPlusTest_version_major 1.9)
set (cPlusPlusTest_version_minor 0)
configure_file(
"${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
"${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
)2. cPlusPlusTestConfig.h.in(输入文件)
#define cPlusPlusTest_version_major @[email protected]
#define cPlusPlusTest_version_minor @[email protected]
3. cPlusPlusTestConfig.h(输出文件)
自动生成,无需我们手动操作输入

PROJECT_BINARY_DIR:官方解释是 用于生成项目目录的完整路径
例如:

PROJECT_SOURCE_DIR: PROJECT_SOURCE_DIR为包含PROJECT()的最近一个CMakeLists.txt文件所在的文件夹。
例如:内层的CMakeLists.txt 中不包project()
此时将出错 告诉我文件不存在

我将其放置于外层,则没有错误

add_definitions-------------------------添加宏定义
添加一个flag用于预处理
添加方式有两种:
- -D开头
- /D开头
例如:add_definitions(-DMyDebug)

使用:
注意:使用时不要前面的 -D
边栏推荐
猜你喜欢

【学习笔记】AGC010

Practical example of propeller easydl: automatic scratch recognition of industrial parts

COSCon'22 社区召集令来啦!Open the World,邀请所有社区一起拥抱开源,打开新世界~

PAcP learning note 1: programming with pcap

Ogre入门尝鲜

Sequoia China completed the new phase of $9billion fund raising

【Presto Profile系列】Timeline使用

达晨与小米投的凌云光上市:市值153亿 为机器植入眼睛和大脑

基于鲲鹏原生安全,打造安全可信的计算平台

【无标题】
随机推荐
迅为iTOP-IMX6ULL开发板Pinctrl和GPIO子系统实验-修改设备树文件
服务器到服务器 (S2S) 事件 (Adjust)
10 张图打开 CPU 缓存一致性的大门
The difference between cache and buffer
Pay close attention to the work of safety production and make every effort to ensure the safety of people's lives and property
Practical example of propeller easydl: automatic scratch recognition of industrial parts
ORACLE进阶(五)SCHEMA解惑
Pcap learning notes II: pcap4j source code Notes
Unity 构建错误:当前上下文中不存在名称“EditorUtility”
About the problem of APP flash back after appium starts the app - (solved)
Vscode编辑器ESP32头文件波浪线不跳转彻底解决
Initialization script
Query whether a field has an index with MySQL
PCAP学习笔记二:pcap4j源码笔记
[learning notes] zkw segment tree
Go language learning notes - structure
【学习笔记】线段树选做
Cinnamon 任务栏网速
.Net下極限生產力之efcore分錶分庫全自動化遷移CodeFirst
AUTOCAD——大于180度的角度标注、CAD直径符号怎么输入?