merlinzjl

导航

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)

posted on 2020-10-30 21:09  merlinzjl  阅读(581)  评论(0编辑  收藏  举报