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)