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)一直上传,自动传递到嵌套的最近的策略栈条目。

posted on 2012-06-25 21:41  SirDigit  阅读(12780)  评论(0编辑  收藏  举报