CMake 手册详解(五)

CMD#2: add_custom_target 添加一个目标,它没有输出;这样它就总是会被构建。

  add_custom_target(Name [ALL] [command1 [args1...]]
                    [COMMAND command2 [args2...] ...]
                    [DEPENDS depend depend depend ... ]
                    [WORKING_DIRECTORY dir]
                    [COMMENT comment] [VERBATIM]
                    [SOURCES src1 [src2...]])

  用Name选项给定的名字添加一个目标,这个目标会引发给定的那些命令。这个目标没有输出文件,并且总是被认为是过时的,即使那些命令试图去创建一个与该目标同名的文件。使用ADD_CUSTOM_COMMAND命令可以生成一个带有依赖性的文件。默认情况下,没有目标会依赖于自定义目标。使用ADD_DEPENDENCIES命令可以添加依赖于该目标或者被该目标依赖的目标。如果指定了ALL选项,这表明这个目标应该被添加到默认的构建目标中,这样它每次都会被构建(命令的名字不能是ALL)。命令和选项是可选的;如果它们没有被指定,将会产生一个空目标。如果设定了WORKING_DIRECTORY参数,该命令会在它指定的路径下执行。如果指定了COMMENT选项,后跟的参数将会在构件的时候,在命令执行之前,被显示出来。DEPENDS选项后面列出来的依赖目标可以引用add_custom_command命令在相同路径下(CMakeLists.txt)生成的输出和文件。

  如果指定了VERBATIM选项,所有传递到该命令的选项将会被合适地转义;这样,该命令调用的构建工具会接收到未经改变的参数。注意,CMake语言处理器会在add_custom_target命令在看到这些参数之前对它们进行一层转义。推荐使用该参数,因为它保证了正确的行为。当未指定该参数时,转义的行为依赖于平台,因为CMake没有针对于特定工具中特殊字符的保护措施。

  SOURCES选项指定了会被包含到自定义目标中的附加的源文件。指定的源文件将会被添加到IDE的工程文件中,方便在没有构建规则的情况下能够编辑。

CMD#3:add_definitions 为源文件的编译添加由-D引入的define flag。

  add_definitions(-DFOO -DBAR ...)

  在编译器的命令行上,为当前路径以及下层路径的源文件加入一些define flag。这个命令可以用来引入任何flag,但是它的原意是用来引入预处理器的定义。那些以-D或/D开头的、看起来像预处理器定义的flag,会被自动加到当前路径的COMPILE_DEFINITIONS属性中。为了后向兼容,非简单值(non-trival,指的是什么?——译注)的定义会被留在flags组(flags set)里,而不会被转换。关于在特定的域以及配置中增加预处理器的定义,参考路径、目标以及源文件的COMPILE_DEFINITIONS属性来获取更多的细节。

CMD#4:add_dependencies 为顶层目标引入一个依赖关系。

  add_dependencies(target-name depend-target1
                   depend-target2 ...)

  让一个顶层目标依赖于其他的顶层目标。一个顶层目标是由命令ADD_EXECUTABLE,ADD_LIBRARY,或者ADD_CUSTOM_TARGET产生的目标。为这些命令的输出引入依赖性可以保证某个目标在其他的目标之前被构建。查看ADD_CUSTOM_TARGET和ADD_CUSTOM_COMMAND命令的DEPENDS选项,可以了解如何根据自定义规则引入文件级的依赖性。查看SET_SOURCE_FILES_PROPERTIES命令的OBJECT_DEPENDS选项,可以了解如何为目标文件引入文件级的依赖性。

CMD#5:add_executable: 使用给定的源文件,为工程引入一个可执行文件。

  add_executable(<name> [WIN32] [MACOSX_BUNDLE]
                 [EXCLUDE_FROM_ALL]
                 source1 source2 ... sourceN)

  引入一个名为<name>的可执行目标,该目标会由调用该命令时在源文件列表中指定的源文件来构建。<name>对应于逻辑目标名字,并且在工程范围内必须是全局唯一的。被构建的可执行目标的实际文件名将根据具体的本地平台创建出来(比如<name>.exe或者仅仅是<name>)。

  默认情况下,可执行文件将会在构建树的路径下被创建,对应于该命令被调用的源文件树的路径。如果要改变这个位置,查看RUNTIME_OUTPUT_DIRECTORY目标属性的相关文档。如果要改变最终文件名的<name>部分,查看OUTPUT_NAME目标属性的相关文档。

  如果指定了MACOSX_BUNDLE选项,对应的属性会附加在创建的目标上。查看MACOSX_BUNDLE目标属性的文档可以找到更多的细节。

  如果指定了EXCLUDE_FROM_ALL选项,对应的属性将会设置在被创建的目标上。查看EXCLUDE_FROM_ALL目标属性的文档可以找到更多的细节。

  使用下述格式,add_executable命令也可以用来创建导入的(IMPORTED)可执行目标:

  add_executable(<name> IMPORTED)

  一个导入的可执行目标引用了一个位于工程之外的可执行文件。该格式不会生成构建这个目标的规则。该目标名字的作用域在它被创建的路径以及底层路径有效。它可以像在该工程内的其他任意目标一样被引用。导入可执行文件为类似于add_custom_command之类的命令引用它提供了便利。

  关于导入的可执行文件的细节可以通过设置以IMPORTED_开头的属性来指定。这类属性中最重要的是IMPORTED_LOCATION(以及它对应于具体配置的版本IMPORTED_LOCATION_<CONFIG>);该属性指定了执行文件主文件在磁盘上的位置。查看IMPORTED_*属性的文档来获得更多信息。

CMake 手册详解(五)相关推荐

  1. CMake手册详解 (十二)

    2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十二) CMD#30:find_library查找一个库文件 find_library ...

  2. CMake 手册详解(十八)

    2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake 手册详解(十八) CMD#45 : include从给定的文件中读取CMake的列表文件. in ...

  3. CMake手册详解 (十四)

    2019独角兽企业重金招聘Python工程师标准>>> SirDigit CMake手册详解 (十四) CMD#32 : find_path搜索包含某个文件的路径 find_path ...

  4. CMake 手册详解(四)

    CMake手册的客套话总算说完了,开始进入正题.第一部分是CMake命令.命令就相当于命令行下操作系统提供的各种命令,重要性不言而喻:可以说,这些命令是CMake构建系统的骨架.CMake 2.8.3 ...

  5. CMake 手册详解之一 语法

    来源 http://www.cnblogs.com/coderfenghc/tag/cmake/ 公司的一个项目使用CMake作为跨平台构建工具:业务有需求,当然要好好研读一下官方的技术手册.目前的计 ...

  6. CMake 手册详解(二十二)

    原文地址 http://www.cnblogs.com/coderfenghc/archive/2012/10/20/2712806.html CMD#65: separate_arguments 将 ...

  7. CMake使用详解二(多文件编译)

    文章目录 1 同一目录,多个源文件 1.1 创建2个源文件 1.2 编写CMakeLists.txt 1.3 编译项目 2 多个目录,多个源文件 2.1 在不同的目录下新建源代码 2.2 编写CMak ...

  8. CMake使用详解一(单文件编译)

    文章目录 1 什么是CMake 2 单个源文件编译 2.1 编写单个cpp文件 2.2 编写CMakeLists.txt 2.3 使用`cmake .`和`make`编译项目 2.3.1 执行`cma ...

  9. 说明使用tc编程的一般步骤 c语言,TC编程手册详解-完整版.doc

    TC编程手册详解-完整版 TC编程手册详解-完整版 本文是TC的第一部分,主要介绍一些TC相关的基础知识,并着重针对循环.变量等TC基本概念中的易混的淆部分加以辨析,即是一份编程初学者的指南,也可算作 ...

最新文章

  1. js获取iframe中的元素_在 HTML 中包含资源的新思路
  2. element怎么设置复选框属性_【JavaScript 教程】DOM——属性的操作
  3. 织梦 PHP 字段 调用,织梦dede网站内容模型普通文章调用自定义图片字段的方法(和调用...
  4. python库和模块的区别_在函数中导入python库与全局导入之间有何区别?
  5. Python使用request包请求网页乱码解决方法
  6. 武汉超级计算机中心,加快打造“五个中心” 武汉率先开建人工智能计算中心...
  7. media player 控件播放音乐与视频 0130 winform
  8. Linux 如何开启SFTP
  9. 4.Linux/Unix 系统编程手册(上) -- 文件IO:通用的IO模型
  10. StanfordDB class自学笔记 (3) 查询关系型数据库总览
  11. 学习笔记--SQLyog的使用
  12. PascalVOC Dataset下载链接
  13. 软件环境整理(pro、sit、test、pre、dev)
  14. 模拟退火算法应用(Java)
  15. 自定义ViewPager实现3D画廊效果
  16. Python爬取京东商品评论
  17. 国服最强王者之最良心王者
  18. 通过css设置img的src
  19. IT职场人生系列之二十三:知识体系(专家与杂家)
  20. 导出Excel功能代码

热门文章

  1. GlusterFS安装配置
  2. 趣味编程:C#中Specification模式的实现
  3. MySQL取字段注释
  4. 中石油训练赛 - Trading Cards(最大权闭合子图)
  5. POJ - 3974 Palindrome(二分+哈希/马拉车)
  6. 2018宁夏邀请赛 - Goldbach(米勒罗宾素数测试)
  7. vs运行时 文本可视化工具 无法点开_webpack 优化:2 款工具帮你找到构建速度“变慢”的原因...
  8. 查看计算机.net环境版本,windows7系统查看NET Framework版本的两种方法
  9. 浪潮服务器更换硬盘_总金额2.5亿!浪潮信息助力中国移动部署NFV项目
  10. SPOJ1811最长公共子串问题(后缀自动机)