
cmake DSL语言
cmake相关知识汇总
wzj_110
天道酬勤
展开
-
cmake(三十九)Cmake之execute_process指令
一 官网博客用途:执行一个或多个'子进程'场景:通过git命令'读取版本号',在代码中使用;列出某些'文件的名称'在代码中使用1) 按指定的'先后顺序'运行一个或多个命令特点:每个进程的输出通过管道连接'作为'下一个进程的输入2) 所有的进程使用'单个的'标准错误输出管道3) 如果指定了'WORKING_DIRECTORY',则'指定的目录'将作为'子进程'当前的'工作'目录4) 如果指定了'TIMEOUT'值,则如果在指定的时间内(以秒为单位计算,允许有小数..原创 2021-05-18 23:50:18 · 3614 阅读 · 2 评论 -
cmake(三十八)Cmake之ExternalProject_Add指令
一 背景1)ExternalProject命令可以很好的'解决'项目中使用'第三方库',提高项目的'可用性'2)使用 ExternalProject 来管理'第三方'依赖二 官网参考三 指令解读说明: 只'解读'常用的(1)目录配置PREFIX:'目录前缀'DOWNLOAD_DIR:这个比较'重要',建议选个'编译目录同级'的,这样'删掉编译目录'后,就相当于缓存目录了,下次再编译就可以'节约下载'时间 -->only关联'URL下载'S...原创 2021-05-13 00:07:48 · 11785 阅读 · 1 评论 -
cmake(三十七)Cmake执行其它命令
一 几个比较重要的模块二 执行shell命令的几种方式+++++++++++++++'重点'+++++++++++++++1)add_custom_command 2)add_custom_target3)execute_process备注: 执行'时机'不一样-->最后是'cmake时候'执行;前'两种'是make时候'可能'执行(依据:是否指定ALL或者make的时候'是否指定'target)4)ExternalProject备注: 在使用'Exte...原创 2021-05-12 21:31:03 · 1086 阅读 · 0 评论 -
cmake(三十六)Cmake常用变量的解读
一 对比变量的差异以demo为例主要涉及目录结果结构原创 2021-05-14 00:17:28 · 3413 阅读 · 0 评论 -
cmake(三十五)Cmake之include指令
一 CMakeLists.txt和cmake脚本的联系和区别① cmake脚本(1) cmake文件里面通常是'什么信息(information)'-- '.cmake文件'里包含了一些"公共(复用)"的'cmake命令'和一些'宏|函数'-- 当CMakeLists.txt'包含该.cmake文件'时,当'编译'运行时,该.cmake里的一些命令就会在该'包含处'得到加载'执行',在'后续'能够'调用该.cmake里'的一些宏和函数-- .cmake文件是一个'模块...原创 2021-05-11 22:55:02 · 7933 阅读 · 2 评论 -
cmake(三十三)Cmake文件操作file之读操作
一 基础知识① 读字节② 读字符串③二 从文件中读字节实践① 项目结构② 提供待操作的文件和CMakeLists.txt文件③ 实践三 从文件中读字符串① 项目结构② 测试文件和CMakeLists.txt③ 测试...原创 2021-05-08 00:05:43 · 2811 阅读 · 0 评论 -
cmake(三十二)Cmake之find_package指令
一 cmake帮助文档find_package命令详解1) --help-command-list cmake'内置命令'列表2) --help-comamnd <command> command帮助文档3) --help-variable-list 完整CMAKE'内置变量'列表4) --help-module-list 现有的'模块'列表 -->'重点'二 find_package语法...原创 2021-05-07 22:33:55 · 2304 阅读 · 0 评论 -
cmake(三十一)Cmake之get_filename_component指令
一 基础知识cmake获取'文件名'的'特定'部分,提供了'三种'调用方式① 方式1② 方式2③ 方式3二 实践(1)路径① 项目结构② CMakeLists.txt文件③ 测试(2)绝对路径① CMakeLists.txt文件② 测试(3)链接① 文件不存在② 创建符号链接文件CMakeLists.txt.link(4...原创 2021-05-06 00:05:53 · 19411 阅读 · 3 评论 -
cmake(三十)Cmake target 参数细节
一 目标①可执行程序目标++++++++++++'关注点'++++++++++++给'对应'目标'设置属性'1)参数12)参数2② 库目标备注:Module'出错'了,这是Linux系统,'不是Mac'系统target_link_libraries() -->多个指令,不写在一个指令中③ 自定义目标1)参数12)参数23)参数3...原创 2021-05-04 10:58:50 · 1339 阅读 · 0 评论 -
cmake(二十九)Cmake主体结构
一 Cmake的主体结构CMake进阶之CMake原理 cmake3 --help -->'cmake 支持的生成器'CMake支持下列generatorcmake生成器表达式命令① 总述② 用到的C++类③ cmake④ 全局生成器⑤ 局部生成器⑥ cmMakefile⑦ cmCommand⑧ 小结二 补充234...原创 2021-05-04 09:49:09 · 502 阅读 · 0 评论 -
cmake(二十八)Cmake工具链
一 toolchain.cmake5 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")6 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")第 5 和 6 行设置了两个变量 CMAKE_CXX_FLAGS_DEBUG 和CMAKE_CXX_FLAGS_RELEASE, 这两个变量是分别用于 debug 和 release 的'编译选项'1...原创 2021-05-04 01:05:14 · 4637 阅读 · 0 评论 -
cmake(二十七)Cmake中target再理解
之前的几篇博客cmake翻译手册详解cmake FAQ问题一 目录结构二 相关指令目录结构-->'最佳实践'1.自动创建的目录 bin 可执行文件输出目录 lib 静态库输出目录目录结构的作用:对于一个优秀的程序员而言,不仅仅是编写代码的能力很强,技术高深,还有着强大的组织文件结构以及程序版式能力,这些虽然不会影响着程序的运行效果,但是能体现一个优秀程序员的专业素质,更能够帮助我们清晰的理解和阅读!思考: 是否要将'.h对应的c|cpp'文...原创 2021-05-03 22:02:10 · 21569 阅读 · 6 评论 -
cmake(二十六)库的杂谈
说明: 本篇章是为了更高的理解'头文件、库文件、lib库'之间的联系,'辅助'理解'cmake'相关的指令一 库① 什么是库前提: 在windows平台和linux平台下都存在着'大量'的库库是写好的现有的、'成熟的'、可以'复用'的代码备注: 现实中每个程序都要依赖很多'基础的底层库',不可能每个人的代码都'从零开始',因此'库的存在意义'非同寻常1)库'library'是函数库的'简称'2)每个库都有'至少一个'的'头文件(.h文件)'和一个'库文件(二进制)...原创 2021-05-02 13:20:06 · 562 阅读 · 0 评论 -
cmake(二十五)config、cmake、make区别
一 cmake命令行参数+++++++++++++'传递变量(连着)'+++++++++++++1)DCMAKE_BUILD_TYPE:设置'编译的类型'(e.g. Debug,Release)cmake -DCMAKE_BUILD_TYPE=Debug2)DCMAKE_C_COMPILER:设置'C编译器'(e.g. gcc,/usr/bin/gcc-7.4.0)cmake -DCMAKE_C_COMPILER=gcc3)DCMAKE_CXX_COMPILER:设置'C..原创 2021-04-29 22:47:59 · 4343 阅读 · 0 评论 -
cmake(二十四)Cmake的内置变量
一 变量分类: 变量的'类型'、变量的'功能'① 目的++++++++++++梳理变量的'目的'++++++++++++1)'看懂'别人的代码,知道执行'每条cmake指令'所处的'位置'2)对比'变量'的'异同',更好的进行抉择3)代码'规范',尽量保持'一种风格'例外: 多个变量可以表示'同一个含义'时候,应根据'上下文'合理取舍② 内置命令变量${CMAKE_COMMAND} -->'cmake'${CMAKE_MAKE_PROG...原创 2021-04-29 19:54:21 · 2185 阅读 · 0 评论 -
cmake(二十三)Cmake之设置属性
一 基础知识① 基础指令② 解读二 实践① 项目初始化备注: 包含'SubDir'子目录,'子目录'生成一个简单的'静态库'② 子项目SubDir③ 项目根目录备注1: 第'6行'少了一个'$'备注2: 第'10'行myPrint中的'm'为小写④ 测试说明: 主要说明'GLOBAL'、'APPEND_STRING'、'APPEND'⑤ 测试DIRECTORY这个域1...原创 2021-04-29 12:47:44 · 1688 阅读 · 0 评论 -
cmake(二十二)Cmake把外部项目项目添加到当前项目中
一 实践① 项目初始化,目录结构需求:把'out'项目添加到'cmake_root'项目中说明3:进入'f'目录,一个'头'文件,一个'源'文件,用于生成演示用的'静态库'备注: 关于'd、e'的CMakeLists.txt,只有'一句话'add_subdirectory(子目录)② f目录文件的内容优化: 直接在'out'目录中,add_subdirectory(d/e/f),不需要在'd'和'e'目录中透传原因: 如果'son'、'sunson'...原创 2021-04-29 11:03:42 · 1208 阅读 · 0 评论 -
cmake(二十一)Cmake之变量检测
一 基础知识应用场景: 更多的是'debugg'调试二 实践① 项目初始化② CMakeLIsts.txt文件③ 测试原创 2021-04-29 09:52:24 · 1246 阅读 · 0 评论 -
cmake(二十)Cmake之列表
业务驱动: 'list'的应用'场景'一 列表的读操作① 列表定义② 列表的读操作1) '获取'列表的'长度'2) '读取'列表的元素3) '截取'列表获取'子列表'③ 项目初始化④ 编写CMakeLIsts.txt文件核心: 'LENGTH'、'GET'、'JOIN'、'SUBLIST'关键字,读取的内容'会保存'到变量中⑤ 测试二 列表的搜索操作① FIND查找② 项目初始化...原创 2021-04-28 23:01:58 · 769 阅读 · 0 评论 -
cmake(十九)Cmake外部项目的导入
一 ExternalProject_Add灵感来源: 'CI构建'用在非'C/C++'的工程中注意选择'对应的版本'解读 -->这里选择'3.16、3.17'① 官网文档语法: 'ExternalProject_Add'(<name> [<option>...])②set(libhello_src ${CMAKE_CURRENT_SOURCE_DIR}/libhello/src)set(libhello_binary ${...原创 2021-04-26 23:37:09 · 2049 阅读 · 0 评论 -
cmake(十八)Cmake的宏macro
一 基础知识1) cmake中的'函数'和'宏(macro)'区别2) cmake中的宏和'C语言'的宏的区别二 实践备注: 不细讲,主要是'区别'4-24- 19-04-08三 补充使用execute_process调用shell命令或脚本execute_process(COMMAND sh test.sh WORKING_DIRECTORY <test.sh所在目录>)注:在调用一个execute_process时可以'顺序...原创 2021-04-26 00:09:27 · 3725 阅读 · 0 评论 -
cmake(十七)Cmake的foreach循环和while循环
一 基础知识官方指导① 基本语法② foreach指令的四种使用方法二 实践① 项目初始化②③ 测试原创 2021-04-24 23:58:22 · 11089 阅读 · 0 评论 -
cmake(十六)Cmake条件判断指令
一 基础语法① 基本框架②优先级③条件的类型二 实践① 项目初始化② CMakeLIsts.txt文件字符串比较默认值③测试④ 补充+++++++++++++'CMake 基本语法'+++++++++++++'CMake定义了一套'领域编程语'言或者说脚本,称为CMake语言,支持'变量定义'、'流程控制'、'函数'、'预制'函数⑤ if多条件判断核心: 掌握if判断...原创 2021-04-24 22:58:28 · 3536 阅读 · 0 评论 -
cmake(十五)Cmake函数
一 基于知识关于'cmake'的函数学习:'类比'其它'语言中的函数'进行分析① 函数定义② 函数调用备注: 函数调用形成'自己的风格',尽量'大写'③ 变量的作用域④ 函数的入参二 实践① 项目初始化备注: CMakeLists.txt编写'有误'② CMakeLIsts.txt定义和调用函数③ 测试1④ 测试2核心: 变量的'作用域'44行'修改' --> me...原创 2021-04-24 18:56:34 · 1588 阅读 · 0 评论 -
cmake(十四)Cmake配置文件
一 基础理论① 语法介绍② 替换说明③ 应用场景二 实践① 项目初始化② 新建一个文件作为配置文件input.h说明: 第'2、3'行关键字'定义错误'-->应为'cmakedefine'③ 新建cmake工程文件CMakeLists,.txt备注: 文件'默认'输出路径-->'CURRENT'④ 测试⑤ 解读1备注: '不加指令' -->...原创 2021-04-24 16:57:06 · 2569 阅读 · 0 评论 -
cmake(十三)Cmake策略管理
一 基础知识二 实践22-23-04二三四原创 2021-04-23 23:34:04 · 585 阅读 · 0 评论 -
cmake(十二)Cmake设置版本最低要求
一 cmake_minimum_required基础知识备注: 'FATAL_ERROR'在'2.6之前'有区别的二 实践备注: 什么代码'都不需要'都可以看到'效果'① 测试1'演示1': 系统的cmake版本'3.17.3'不满足最低要求'3.17.4'版本② 测试2'演示1': 系统的cmake版本'3.17.3'满足最低要求'3.8'版本③ 测试3备注: 指定'min'的同时,同时指定'max'④...原创 2021-04-21 23:35:48 · 1521 阅读 · 0 评论 -
cmake(十一)Cmake查询主机系统的特定信息
一 基础理论知识官方参考cmake_host_system_information(RESULT '<variable>' QUERY '<key>...')二 实践目的: 演示'各个关键字'是查询'什么信息'① 项目初始化② src子目录编写简单的源文件Main.cppvim src/Main.cpp③ 编写src子目录的CMakeLists.txt文件备注1: 第'18、19'行的'PHYSICAL'...原创 2021-04-21 22:13:39 · 916 阅读 · 0 评论 -
cmake(十)Cmake调用外部库
一 相关概念①target_link_libraries官方文档target_link_libraries -->指定'目标链接'的'库'② include_directories③ link_directories1)官网'不推荐'使用'link_directoris',而是'推荐'使用'find_package'和'find_library'寻找'共享库的绝对路径',再'传给'target_link_libraries'使用'2)'lin...原创 2021-04-20 00:19:52 · 1316 阅读 · 0 评论 -
cmake(九)Cmake设置生成库的属性
一 基本语法① 设置目标的属性set_property(<GLOBAL|DIRECTORY [dir] |TARGET [target1 [target2 ...]] |SOURCE [src1 [src2 ...]] |TEST [test1 [test...原创 2021-04-19 00:13:34 · 1005 阅读 · 0 评论 -
cmake(八)Cmake定义安装
一 cmake安装汇总① 语法规则② 安装规则③ 二进制目标文件④ 普通文件安装⑤ 非目标可执行程序备注: 一般是'sh'、'python'脚本⑥ 目录的安装⑦ 安装时执行的cmake脚本find / -name *.cmake备注: 注意'cmake'后缀文件的'编写'语法备注: []是'非必须'参考博客⑧二 实践① 项目初始化++++++++++++++'执行步骤'++++++++...原创 2021-04-18 19:53:58 · 639 阅读 · 0 评论 -
cmake(七)Cmake指定目标保存文件
一 两种方法保存编译输出的对比核心差异性: 'add_subdirectory'除了保存'最终可执行文件',还会保存'编译生成的中间件'二 实践① 项目初始化工作② 新增相关源文件说明: 声明一个'函数'备注: 缺少'#include <stdlib.h>',进行'add'添加,否则后续'报错'③ 添加CMakeLists.txt文件④ 项目根目录添加CMakeLIsts.txt文件...原创 2021-04-18 10:10:27 · 1118 阅读 · 0 评论 -
cmake(六)Cmake添加工程子目录
重点: 'cmake3' 和 'make' 命令'输出'的'深刻解读'备注: 当前阶段暂时不使用'IDE'工具,先'熟悉各指令'一 ADD_SUBDIRECTORY语法应用场景: 一般情况下,我们的项目'各个子项目'都在一个'总的项目根'目录下,但有的时候,我们需要使'用外部的文件夹'cmake项目模块布局二 实践1① 初始化'外部文件夹'引入理解: 不在'CMakeLists'目录下 -->(与其'平级'或者还在'其外'),这里'不是'指的项目根目录...原创 2021-04-17 11:16:37 · 7928 阅读 · 1 评论 -
cmake(五)Cmake构建静态库和动态库
一 基本语法二 构建动态库目的: 构建一个'库'供'他人'使用① 新建目录演示② 添加头文件1)我们一般在'.h后缀'的'头文件'里面只放入'函数声明'、'宏定义'、'函数原型'h -->'header'2)而'具体的实现'在.cpp文件里面3)在'编译(compile)'的时候,编译器会'自动加载'和'.h'匹配的'.cpp'文件#ifndef的用法1)命名规则核心: '独一无二'的,不要冲突2)如何编写头文件3)...原创 2021-04-16 07:59:59 · 1331 阅读 · 0 评论 -
cmake(四)CMake项目的二进制目录和源目录
一 二进制目录和源目录知道'在哪(DIR)'很重要① 环境修改② 修改CMakeLists.txt文件③ 测试④ 最佳实践原创 2021-04-15 23:50:01 · 1909 阅读 · 0 评论 -
cmake(三)CMake输出自定义信息
一 message函数① 清理上次的构建产物② message函数1)CMake 的命令行工具会在 'stdout' 上显示 'STATUS' 消息,在 stderr 上显示'其他所有'消息2)CMake '警告和错误消息'的文本显示使用的是一种'简单的标记语言';文本'没有缩进',超过长度的行会'回卷',段落之间以'新行'做为'分隔符'+++++++++'消息不同级别的行为'+++++++++ (无) = '重要'消息; STATUS = '非重要'消息;-...原创 2021-04-14 23:55:24 · 2006 阅读 · 0 评论 -
cmake(二)构建Hello World简单工程
一 简单结构① 项目宏观查看② HelloCmake.cpp③ CMakeLists.txt1)project函数解读2)set函数解读3)add_executable函数解读④ cmake下备注: 注意当前'所在的'位置 --> '子项目'下⑤ make后进行测试make是一个'命令'工具,是一个'解释makefile'中指令的'命令工具'⑥ 报错解决...原创 2021-04-14 00:37:42 · 955 阅读 · 0 评论 -
cmake(一)编译安装
一 基于x86的Centos7.7安装① 操作系统默认安装的说明: 有两个'版本'② 安装新版本备注: 使用'新'特性官网下载地址参考博客make和cmake的区别B站cmake学习视频原创 2021-04-13 23:31:29 · 2131 阅读 · 1 评论