我正在尝试为我的基于 ARM 的笔记本电脑编译 Paraview 图形可视化软件;但是,我收到一些似乎与 cmake“策略”相关的配置警告。警告文本和 cmake 手册页表明我应该能够运行命令cmake_policy()
来设置特定策略;但是,我不知道如何或在哪里运行它。
如何设置特定的 cmake 策略?
答案1
CMake 命令cmake_policy()
记录在CMake 文档。
它通常被添加到CMakeLists.txt
项目的文件中以更改 CMake 本身的行为,通常能够CMakeLists.txt
使用较新版本的 CMake 处理旧功能。
您可以使用它来设置单独的策略
cmake_policy(SET CMP<NNNN> OLD)
其中<NNNN>
是 CMake 策略编号,其中OLD
表示您想要此策略的“旧行为”(该词OLD
也可以是NEW
)。
或者,您可以使用该命令来设置与特定版本的 CMake 兼容的策略:
cmake_policy(VERSION x.xx)
其中x.xx
必须至少是2.4
.
无论哪种情况,CMakeLists.txt
项目的文件都会被修改,并且cmake
必须重新运行。
另请参阅文档cmake_minimum_required()
。
答案2
我使用 Cmake 版本 3.22.0,@kusalananda 的回答没有为我解决问题。我在顶部添加了以下行CMakeLists.txt
,问题得到解决:
set(CMAKE_POLICY_DEFAULT_CMP<NNNN> NEW)
当然,NNNN
应该替换为命令行中给出的数字。
答案3
最后的 CMake 策略警告明确告知用户,他们不应该关心这些消息。这些消息是为项目开发人员准备的。
CMake Warning (dev) at c/tools/CMakeLists.txt:22 (add_executable):
Policy CMP0069 is not set: INTERPROCEDURAL_OPTIMIZATION is enforced when
enabled. Run "cmake --help-policy CMP0069" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
INTERPROCEDURAL_OPTIMIZATION property will be ignored for target
'msgr-recv'.
This warning is for project developers. Use -Wno-dev to suppress it.
用来-Wno-dev
压制它。
然而,有时作为软件的用户,您有充分的理由在安装项目时设置策略。原因之一可能是启用链接时优化(也称为过程间优化)。如果不设置策略,CMake 将忽略-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
.
在这种情况下,您可以使用-DCMAKE_POLICY_DEFAULT_CMP<NNNN>
获得您需要的行为,无需编辑 CMakeLists.txt。当然,联系开发人员,建议他们处理源代码中的策略,是一个很好的做法。
-DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON