2016-12-16 2 views
2

Ich habe folgende CMake-Datei:Disable Werror für einen CMakeLists.txt

project(MyLib) 
cmake_minimum_required(VERSION 2.8) 

if(NOT CMAKE_BUILD_TYPE) 
    set(CMAKE_BUILD_TYPE "release") 
endif() 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror") 
set(ROOT_DIR ${CMAKE_SOURCE_DIR}) 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ROOT_DIR}/bin/${CMAKE_BUILD_TYPE}) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ROOT_DIR}/bin/${CMAKE_BUILD_TYPE}) 
set(MAIN_LIBRARY_NAME "mylib") 

add_subdirectory(src) 
add_subdirectory(test_app) 
add_subdirectory(test_app1) <--- I want to disable -Werror flag for CMakeLists.txt in this folder. 
add_subdirectory(test_app2) 

Wie Werror Flag für einen Unterordner deaktivieren? In jedem der Unterverzeichnisse habe ich auch CMakeLists.txt.

+1

Alle Variablen und Verzeichniseigenschaften werden in den Kontext des Unterverzeichnisses kopiert Im Moment rufen Sie 'add_subdirectory()' auf. Modifizieren Sie 'CMAKE_CXX_FLAGS' vor diesem Aufruf oder verwenden Sie [' add_compile_options() '] (https://cmake.org/cmake/help/latest/command/add_compile_options.html) und modifizieren Sie [' COMPILE_OPTIONS'] (https: // cmake.org/cmake/help/latest/prop_dir/COMPILE_OPTIONS.html) Unterverzeichniseigenschaft nach diesem Aufruf. – Florian

+0

@Florian Nicht genau ein Duplikat würde ich sagen. Die Antwort auf diese Frage ist in dieser Frage enthalten, nicht in einer ihrer Antworten. – Antonio

+0

@Antonio Also muss ich wie in Beispiel in dieser Frage tun: stackoverflow.com/questions/33828855/...? –

Antwort

2

Drehen meines Kommentars in einer Antwort

Alle Variablen und Verzeichniseigenschaften werden in den Kontext Sie add_subdirectory() rufen im Moment des Unterverzeichnis kopiert. Entweder ändern CMAKE_CXX_FLAGS vor diesem Aufruf mit so etwas wie

string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 
add_subdirectory(test_app1) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") 

Oder nutzen Sie den „alten Weg“ waren Compiler-Flags mit add_definitions() gegeben werden kann und entfernt mit remove_definitions()

add_definitions(-std=c++11 -Wall -Werror) 
... 
remove_definitions(-Werror) 
add_subdirectory(test_app1) 
add_definitions(-Werror) 

Aber man kann - im Gegensatz zu meinem erster Kommentar - Änderungsflags hinzugefügt add_compile_options() nur auf Zielebene COMPILE_OPTIONS Eigenschaft und nicht für vollständige Verzeichnisse. Wenn das Ziel erstellt wird, wird die Eigenschaft unverändert aus dem Verzeichnis in das Ziel kopiert. Wird die Verzeichniseigenschaft später geändert, wird die Eigenschaft des Ziels nicht automatisch aktualisiert.

Wenn Sie eine neuere CMake-Version, die SOURCE_DIR Zieleigenschaft unterstützt, können Sie alternativ auch durch einig verrückten Generator Ausdruck gehen:

add_compile_options(
    -std=c++11 
    -Wall 
    $<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:SOURCE_DIR>,${CMAKE_SOURCE_DIR}/test_app1>>:-Werror> 
) 

Referenz