CMake 手册详解(七)
2019独角兽企业重金招聘Python工程师标准>>>
SirDigit
CMake 手册详解(七)
CMD#11:build_command 获取构建该工程的命令行。
build_command(<variable> [CONFIGURATION <config>] [PROJECT_NAME <projname>] [TARGET <target>])
把给定的变量<variable>设置成一个字符串,其中包含使用由变量CMAKE_GENERATOR确定的项目构建工具,去构建某一个工程的某一个目标配置的命令行。
对于多配置生成器,如果忽略CONFIGURATION选项,CMake将会选择一个合理的默认值;而对于单配置生成器,该选项会被忽略。
如果PROJECT_NAME选项被忽略,得到的命令行用来构建当前构建树上的顶层工程。
如果TARGET选项被忽略,得到的命令行可以用来构建所有目标,比较高效的用法是构建目标all或者ALL_BUILD。
build_command(<cachevariable> <makecommand>)
不推荐使用以上的这种格式,但对于后相兼容还是有用的。只要可以,就要使用第一种格式。
这种格式将变量<cachevariable>设置为一个字符串,其中包含从构建树的根目录,用<makecommand>指定的构建工具构建这个工程的命令。<makecommand>应该是指向msdev,devenv,nmake,make或者是一种最终用户指定的构建工具的完整路径。
CMD#12:cmake_minimum_required 设置一个工程所需要的最低CMake版本。
cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]] [FATAL_ERROR])
如果CMake的当前版本低于指定的版本,它会停止处理工程文件,并报告错误。当指定的版本高于2.4时,它会隐含调用:
cmake_policy(VERSION major[.minor[.patch[.tweak]]])
从而将cmale的策略版本级别设置为指定的版本。当指定的版本是2.4或更低时,这条命令隐含调用:
cmake_policy(VERSION 2.4)
这将会启用对于CMake 2.4及更低版本的兼容性。
FATAL_ERROR选项是可以接受的,但是CMake 2.6及更高的版本会忽略它。如果它被指定,那么CMake 2.4及更低版本将会以错误告终而非仅仅给出个警告。
CMD#13:cmake_policy 管理CMake的策略设置。
随着CMake的演变,有时为了搞定bug或改善现有特色的实现方法,改变现有的行为是必须的。CMake的策略机制是在新的CMake版本带来行为上的改变时,用来帮助保持现有项目的构建的一种设计。每个新的策略(行为改变)被赋予一个"CMP<NNNN>"格式的识别符,其中"<NNNN>"是一个整数索引。每个策略相关的文档都会描述“旧行为”和“新行为”,以及引入该策略的原因。工程可以设置各种策略来选择期望的行为。当CMake需要了解要用哪种行为的时候,它会检查由工程指定的一种设置。如果没有可用的设置,工程假定使用“旧行为”,并且会给出警告要求你设置工程的策略。
cmake_policy是用来设置“新行为”或“旧行为”的命令。如果支持单独设置策略,我们鼓励各项目根据CMake的版本来设置策略。
cmake_policy(VERSION major.minor[.patch[.tweak]])
上述命令指定当前的CMakeLists.txt是为给定版本的CMake书写的。所有在指定的版本或更早的版本中引入的策略会被设置为使用“新行为”。所有在指定的版本之后引入的策略将会变为无效(unset)。该命令有效地为一个指定的CMake版本请求优先采用的行为,并且告知更新的CMake版本给出关于它们新策略的警告。命令中指定的策略版本必须至少是2.4,否则命令会报告一个错误。为了得到支持早于2.4版本的兼容性特性,查阅策略CMP0001的相关文档。
cmake_policy(SET CMP<NNNN> NEW)
cmake_policy(SET CMP<NNNN> OLD)
对于某种给定的策略,该命令要求CMake使用新的或者旧的行为。对于一个指定的策略,那些依赖于旧行为的工程,通过设置策略的状态为OLD,可以禁止策略的警告。或者,用户可以让工程采用新行为,并且设置策略的状态为NEW。
cmake_policy(GET CMP<NNNN> <variable>)
该命令检查一个给定的策略是否设置为旧行为或新行为。如果策略被设置,输出的变量值会是“OLD”或“NEW”,否则为空。
CMake将策略设置保存在一个栈结构中,因此,cmake_policy命令产生的改变仅仅影响在栈顶端的元素。在策略栈中的一个新条目由各子路径自动管理,以此保护它的父路径及同层路径的策略设置。CMake也管理通过include()和find_package()命令加载的脚本中新加入的条目,除非调用时指定了NO_POLICY_SCOPE选项(另外可参考CMP0011)。cmake_policy命令提供了一种管理策略栈中自定义条目的接口:
cmake_policy(PUSH)
cmake_policy(POP)
每个PUSH必须有一个配对的POP来去掉撤销改变。这对于临时改变策略设置比较有用。
函数和宏会在它们被创建的时候记录策略设置,并且在它们被调用的时候使用记录前的策略。如果函数或者宏实现设置了策略,这个变化会通过调用者(caller)一直上传,自动传递到嵌套的最近的策略栈条目。
转载于:https://my.oschina.net/iamhere/blog/369296
CMake 手册详解(七)相关推荐
- CMake手册详解 (十二)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十二) CMD#30:find_library查找一个库文件 find_library ...
- CMake 手册详解(五)
CMake 手册详解(五) CMD#2: add_custom_target 添加一个目标,它没有输出:这样它就总是会被构建. add_custom_target(Name [ALL] [comman ...
- CMake 手册详解(十八)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake 手册详解(十八) CMD#45 : include从给定的文件中读取CMake的列表文件. in ...
- CMake手册详解 (十四)
2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十四) CMD#32 : find_path搜索包含某个文件的路径 find_path ...
- CMake 手册详解(四)
CMake手册的客套话总算说完了,开始进入正题.第一部分是CMake命令.命令就相当于命令行下操作系统提供的各种命令,重要性不言而喻:可以说,这些命令是CMake构建系统的骨架.CMake 2.8.3 ...
- CMake 手册详解之一 语法
来源 http://www.cnblogs.com/coderfenghc/tag/cmake/ 公司的一个项目使用CMake作为跨平台构建工具:业务有需求,当然要好好研读一下官方的技术手册.目前的计 ...
- CMake 手册详解(二十二)
原文地址 http://www.cnblogs.com/coderfenghc/archive/2012/10/20/2712806.html CMD#65: separate_arguments 将 ...
- CMake使用详解二(多文件编译)
文章目录 1 同一目录,多个源文件 1.1 创建2个源文件 1.2 编写CMakeLists.txt 1.3 编译项目 2 多个目录,多个源文件 2.1 在不同的目录下新建源代码 2.2 编写CMak ...
- CMake使用详解一(单文件编译)
文章目录 1 什么是CMake 2 单个源文件编译 2.1 编写单个cpp文件 2.2 编写CMakeLists.txt 2.3 使用`cmake .`和`make`编译项目 2.3.1 执行`cma ...
- 说明使用tc编程的一般步骤 c语言,TC编程手册详解-完整版.doc
TC编程手册详解-完整版 TC编程手册详解-完整版 本文是TC的第一部分,主要介绍一些TC相关的基础知识,并着重针对循环.变量等TC基本概念中的易混的淆部分加以辨析,即是一份编程初学者的指南,也可算作 ...
最新文章
- unity片元着色器中获取屏幕坐标_Unity踩坑笔记(持续更新)
- Perl 语言入门6-9
- 计算机网络基础知识第二章要点
- activiti如何最后一次提交事务_2020最后一次水逆,十二星座如何防水逆?
- FlygonTiebaToolkit 的开源决定
- title属性样式 原生dom_HTML DOM title 属性
- 你不知道的 Web 性能优化 | 原力计划
- gyp安装,及breakpad上的使用方法
- Intel汇编与程序设计第五版3.4定义数据小节
- OpenCV 人脸识别DNN face detector文件下载(opencv_face_detector.pbtxt;opencv_face_detector_uint8.pb;。。。。)
- 亚洲最佳电影TOP100出炉 你看过几部?
- 效率软件:微软远程桌面安卓版
- 基于SpringBoot体育用品购物商城-协同过滤推荐算法项目源代码
- AMP—Rover移植
- 网络中的中间商(CDN)
- 某程序员在网吧敲代码,出类拔萃,网友:为何我被打的却是我
- fcpx如何用光流法_5分钟掌握FCPX所有剪辑技巧
- 电子沙盘系统android,电子沙盘指挥系统功能介绍
- 伪原创视频的处理技巧
- 闪聚支付 第3章-支付宝接入指南
热门文章
- 羊车门问题看到吐血后的理解----一千七百字小作文+Python代码验证,帮你从质到量上理解,这再看不明白算我输!
- 用python画一只皮卡丘_用python画一只可爱的皮卡丘实例
- sping jdbc 链接mysql_java项目使用spring jdbc连接数据库
- vivox6Android版本,vivo x6有几个版本?vivo x6各版本区别对比评测
- 「译」创建一个Hexo主题-Part2:其他页面
- Kubernetes Ingress 日志分析与监控的最佳实践 1
- 后端Java架构师图谱(架构师必经之路)
- 传统HTML页面实现模块化加载
- 如何自定义一个注解(@Annotation)
- python3爬虫必学Xpath,快速使用lxml.etree