使用CMake时忽略外部模块中的警告
我正在将使用CMake时忽略外部模块中的警告,cmake,suppress-warnings,cmake-gui,Cmake,Suppress Warnings,Cmake Gui,我正在将CMake GUI(无版本)与CMake3.6.1一起使用。我正在使用一个带有add_子目录的外部模块,它向我显示一些我不喜欢的警告(因为讨厌的污染): 我想在不接触外部文件的情况下隐藏这些警告-Wno dev如果只影响外部模块(g3log) 我尝试使用cmake_策略如下,但没有效果: cmake_policy(PUSH) cmake_policy(SET CMP0054 OLD) add_subdirectory(${g3log_DIR} ${CMAKE_BINARY_DIR}/..
CMake GUI
(无版本)与CMake
3.6.1一起使用。我正在使用一个带有add_子目录的外部模块
,它向我显示一些我不喜欢的警告(因为讨厌的污染):
我想在不接触外部文件的情况下隐藏这些警告<代码>-Wno dev如果只影响外部模块(g3log
)
我尝试使用cmake_策略如下,但没有效果:
cmake_policy(PUSH)
cmake_policy(SET CMP0054 OLD)
add_subdirectory(${g3log_DIR} ${CMAKE_BINARY_DIR}/../g3log)
cmake_policy(POP)
把我的评论变成答案
听起来您的外部模块确实有一个project()
命令。这将重置此子模块及以下模块的策略
为了演示可能的解决方案,假设您有一个外部项目,如下所示:
g3log/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(g3log NONE)
set(VAR1 "Hello World")
set(VAR2 "VAR1")
if ("${VAR2}" STREQUAL "${VAR1}")
message("CMP0054 old behavior")
endif()
cmake_minimum_required(VERSION 3.1)
project(PolicyOverwrite NONE)
set(CMAKE_POLICY_DEFAULT_CMP0054 NEW)
add_subdirectory(g3log)
现在,您可以设置为OLD
(或者更好地设置为NEW
;没有人真正想要“OLD”行为)以消除新版本的CMake将出现的“策略CMP0054未设置”警告:
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(g3log NONE)
set(VAR1 "Hello World")
set(VAR2 "VAR1")
if ("${VAR2}" STREQUAL "${VAR1}")
message("CMP0054 old behavior")
endif()
cmake_minimum_required(VERSION 3.1)
project(PolicyOverwrite NONE)
set(CMAKE_POLICY_DEFAULT_CMP0054 NEW)
add_subdirectory(g3log)
现在,您已经为策略设置了一个默认值,如果您的项目或您正在使用的某个外部项目中没有明确给出任何策略,则将使用该策略。相关:听起来您的外部模块确实有一个project()
命令。这将重置此子模块及以下模块的策略。您可以尝试设置,而不是调用cmake\u policy()
。确实有一个项目(g3log)
。所以你说是不可能的:(?如果你愿意,你可以制定一个答案。不。我试着说cmake_policy(SET cmp054…
不起作用,但是cmake_policy_DEFAULT_cmp054
应该。只是还没有设置一个测试来验证它。请原谅我的无知,但是怎么做?SET(cmake_policy_DEFAULT_cmp054,OLD)
?“没有人真正想要“旧”行为-除了这个模块g3log之外没有人想要,不是吗?set(CMAKE\u POLICY\u DEFAULT\u cmp054 NEW)
beforeadd\u subdirectory(g3log)
会改变这个模块的行为,不是吗?所以更好的答案应该是:set(CMAKE\u POLICY\u DEFAULT\u cmp054 OLD)add\u subdirectory(${SOURCE\u BASE\u EXTERNAL}/corealpi/platform/cmake/core${cmake\u BINARY\u DIR}/corealpi/core)set(cmake\u POLICY\u DEFAULT\u cmp054 NEW)
@Liviu你能添加/发布有问题的g3log cmake脚本行吗?我从来没有遇到过这样的情况,有人期望我在引号中的东西会对变量名再次求值(另请参见)。例如,如果(CMAKE_CXX_编译器ID STREQUAL“MSVC”)
为false,即使CMAKE_CXX_编译器ID确实包含MSVC
?如果(${CMAKE_CXX_编译器ID}”匹配“*Clang”)
还有,第23行。我周期性地理解然后忘记这个特殊的语法。@Liviu它是一个正则表达式,表示所有以铿锵
结尾的东西。它想与字符串匹配,所以肯定是新的。我想他们在旧版本的CMake(即“${CMake\u CXX\u编译器ID})中没有注意到这个错误“
可以计算为1
)。当我说奇怪的语法时,我不是说正则表达式,而是说CMake和引号。谢谢!我肯定会在几天后接受anwser。