2017-01-17 15 views
2

Я использую CMake GUI (без версии) с CMake 3.6.1. Я использую внешний модуль с add_subdirectory, который показывает мне несколько предупреждений, которые мне не нравятся (из-за раздражающего загрязнения):Игнорировать предупреждения во внешних модулях при использовании CMake

CMake Warning (dev) at D:/Sources/.../external/g3log/latest/Build.cmake:11 (IF): 
    Policy CMP0054 is not set: Only interpret if() arguments as variables or 
    keywords when unquoted. Run "cmake --help-policy CMP0054" for policy 
    details. Use the cmake_policy command to set the policy and suppress this 
    warning. 

    Quoted variables like "MSVC" will no longer be dereferenced when the policy 
    is set to NEW. Since the policy is not set the OLD behavior will be used. 
Call Stack (most recent call first): 
    D:/Sources/.../external/g3log/latest/CMakeLists.txt:72 (INCLUDE) 
This warning is for project developers. Use -Wno-dev to suppress it. 

Я хочу, чтобы скрыть эти предупреждения, не касаясь внешних файлов. -Wno-dev было бы нормально, если это повлияет только на внешний модуль (g3log).

Я попытался использовать cmake_policy как следующее при отсутствии эффекта:

cmake_policy(PUSH) 
cmake_policy(SET CMP0054 OLD) 
add_subdirectory(${g3log_DIR} ${CMAKE_BINARY_DIR}/../g3log) 
cmake_policy(POP) 
+0

http://www.stackoverflow.com/questions/29123444/what-is-the-scope-of-cmake-policies – Liviu

+0

Похоже, что ваш внешний модуль имеет команду 'project()'. Это сбрасывает политики для этого подмодуля и ниже. Вы можете попробовать установить ['CMAKE_POLICY_DEFAULT_CMP0054'] (https://cmake.org/cmake/help/latest/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.html) вместо вызова' cmake_policy() '. – Florian

+0

Действительно, существует «проект (g3log)». Таким образом, вы говорите, это невозможно :(Если вы хотите, вы можете сформулировать ответ. – Liviu

ответ

2

Обращаясь мои комментарии в ответ

Это звучит как ваш внешний модуль имеет команду 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_POLICY_DEFAULT_CMP0054 в OLD (или даже лучше до NEW, никто действительно не хотел поведения «OLD»), чтобы избавиться от «Политики CMP0054 не установлены» предупреждения, которые вы получите с более новыми версиями CMake:

CMakeLists.txt

cmake_minimum_required(VERSION 3.1) 
project(PolicyOverwrite NONE) 

set(CMAKE_POLICY_DEFAULT_CMP0054 NEW) 
add_subdirectory(g3log) 

Теперь вы установили по умолчанию для политики CMP0054 будет использоваться, если он не указан явно в вашем проекте или один из внешних проектов, которые вы используете.

+0

«Никто действительно не хотел», OLD «поведение» - никто, кроме этого модуля, g3log, не так ли? 'Set (CMAKE_POLICY_DEFAULT_CMP0054 NEW)' перед 'add_subdirectory (g3log)' изменит поведение этого модуля, не так ли? Итак, лучшим ответом будет: 'set (CMAKE_POLICY_DEFAULT_CMP0054 OLD) add_subdirectory ($ {SOURCE_BASE_EXTERNAL}/corealpi/platform/cmake/core $ {CMAKE_BINARY_DIR}/corealpi/core) set (CMAKE_POLICY_DEFA ULT_CMP0054 NEW) ' – Liviu

+0

@ Liviu Не могли бы вы добавить/опубликовать строки сценария CM3 g3log? Я никогда не сталкивался с ситуацией, когда кто-то ожидал, что то, что я положил в кавычки, снова оценивает имя переменной (см. Также [здесь] (http://stackoverflow.com/questions/31037882/whats-the-cmake- синтаксис в настройке, и использование-переменные)). Так, например,что 'if (CMAKE_CXX_COMPILER_ID STREQUAL" MSVC ")' false, даже CMAKE_CXX_COMPILER_ID действительно содержит 'MSVC'? – Florian

+0

'IF (" $ {CMAKE_CXX_COMPILER_ID} "MATCHES". * Clang ")' Также [github] (https://github.com/KjellKod/g3log/blob/master/Build.cmake), строка 23. Я периодически понимаю, а затем забываю этот особый синтаксис. – Liviu

 Смежные вопросы

  • Нет связанных вопросов^_^