我看到一些文章建议您检查编译器并根据需要添加标记,例如
if (CMAKE_COMPILER_IS_GNUCC)
...
endif()
if (MSVC)
...
endif()
这是一个非常不利的情况。
它依赖于您为每个项目添加对您支持的每个编译器的特定支持,一次一个。
其他内容,例如C++11 features和debug flags由cmake自动为其支持的每个编译器生成。
是否没有通过cmake设置将等效的-Wall
/ /W3
添加到编译中的等效解决方案?
答案 0 :(得分:1)
它依赖于您为每个项目添加对您支持的每个>编译器的特定支持,一次一个。
现在,您只能使用compiler.cmake
之类的内容,为每个编译器配置合适的标志,并在项目中共享compiler.cmake
。
是否没有相同的解决方案只需通过cmake设置将-Wall / / W3等效添加到>编译?
不,现在只有关于类似功能的讨论及其可能的实施,请参阅
https://cmake.org/pipermail/cmake-developers/2016-March/028107.html
答案 1 :(得分:1)
对于任何发现此事的人......
有一个相当强大的实现,可以在这里找到,作为第三方添加:
https://github.com/ruslo/sugar/wiki/Cross-platform-warning-suppression
你这样使用它:
## Project
cmake_minimum_required(VERSION 3.1)
project(npp)
# Dependencies
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/npp)
... whatever ...
# Clone entire sugar repo to source folder and import
include(${CMAKE_CURRENT_SOURCE_DIR}/sugar/cmake/Sugar)
include(sugar_generate_warning_flags)
# Generate flags, included excluded flags, etc.
# see: https://github.com/ruslo/leathers/wiki/List
sugar_generate_warning_flags(
flags
properties
ENABLE ALL
DISABLE c++98-compat padded
TREAT_AS_ERROR ALL
CLEAR_GLOBAL)
# Library / executable if any
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/npp/*.cpp)
add_library(npp STATIC ${SOURCES})
# Set flags
set_target_properties(npp PROPERTIES ${properties} COMPILE_OPTIONS "${flags}")
# Local tests
enable_testing()
add_executable(tests "${CMAKE_CURRENT_SOURCE_DIR}/tests/tests.cpp")
# Set flags
set_target_properties(tests PROPERTIES ${properties} COMPILE_OPTIONS "${flags}")
target_link_libraries(tests npp)
add_test(tests tests)
显然这远非理想,因为必须克隆一组模块非常恼火,但目前它是实用的。