CMake 10 CMake的策略管理

Posted merlinzjl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake 10 CMake的策略管理相关的知识,希望对你有一定的参考价值。

CMake的策略管理用于维护版本的向后兼容,从版本2.0开始引入。

每个新发布版本一般都会引入一些新的策略,每个策略都会有一个标识号,格式

为CMP<NNNN>,<NNNN>对应四个0到9的整数。每个策略都在文档中描述了OLD和NEW的行为,以及引入的原因。

CMake的策略是一种弃用机制,并不是可靠特性的切换,因此,策略的OLD行为一般不可取,因为在未来的版本中可能被抛弃。

cmake_policy(VERSION <min>[…<max>]) 通过版本来设置策略

<min>:最小版本,至少为2.4,至多为当前安装的版本号

<max>:最大版本,至少为<min>,可以大于当前安装版本号,如果当前安装版本小于3.12,…被认为是版本组成的分隔符,从而会忽略…<max>,因此会按3.12之前的版本基于<min>的策略来执行。

调用cmake_minimum_required会隐式调用cmake_policy,因此,如果没有特别的策略要指定,可以直接通过调用cmake_minimum_required即可。

也可以直接使用cmake_policy显示设置策略的行为,为OLD或为NEW。

cmake_policy(SET CMP<NNNN> NEW)

cmake_policy(SET CMP<NNNN> OLD) OLD行为为弃用定义,即在未来的版本中可能被移除。

通过cmake_policy(GET CMP<NNNN> <var>)获取指定策略的行为,值存放到<var>中。

 

CMake用栈来保存策略设置。cmake_policy的操作只影响栈顶。对于每一个子目录,策略栈自动管理新入口,从而保证孩子目录的父目录和兄弟目录不被破坏。对于include()和find_package()指令的脚本,也有新的入口,除非指定了NO_POLICY_SCOPE选项。

cmake_policy(PUSH)

cmake_policy(POP)

以上是关于CMake 10 CMake的策略管理的主要内容,如果未能解决你的问题,请参考以下文章

CMake 编译器标识在 Windows 7 64 位下未知,仅无管理员权限

cget cmake 包管理工具

cmake 多目录管理

使用 cmake 进行交叉编译

cmake学习

CMake 入门学习4 软件包管理