Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake时忽略外部模块中的警告_Cmake_Suppress Warnings_Cmake Gui - Fatal编程技术网

使用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)
before
add\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。