禁用其中一个CMakeLists.txt的-Werror

时间:2016-12-16 10:54:58

标签: cmake

我有以下CMake文件:

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)

如何禁用其中一个子目录的-Werror标志?在每个子目录中我也有CMakeLists.txt。

1 个答案:

答案 0 :(得分:3)

将我的评论转化为答案

在您调用Saver.save时,所有变量和目录属性都会复制到子目录的上下文中。在此调用之前使用类似

的内容修改add_subdirectory()
CMAKE_CXX_FLAGS

或使用&#34;旧方式&#34;可以使用string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") add_subdirectory(test_app1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") 给出编译器标志,并使用add_definitions()

删除
remove_definitions()

但是你可以 - 与我的第一条评论相矛盾 - 更改标志仅在目标级别add_definitions(-std=c++11 -Wall -Werror) ... remove_definitions(-Werror) add_subdirectory(test_app1) add_definitions(-Werror) 属性上添加add_compile_options()而不是完整目录。创建目标时,将属性从目录复制到目标,然后更改目录属性不会自动更新目标的属性。

如果您有一个支持COMPILE_OPTIONS目标属性的较新的CMake版本,您可以选择疯狂的生成器表达式:

SOURCE_DIR

<强>参考