浏览代码

Fix CHECK_(C|CXX)_COMPILER_FLAG for GNU and MSVC

These compilers warn and return 0 for unrecognized flags.  We fix the
compiler flag check macros by looking for a warning in the output.
See issue #9516.
Brad King 16 年之前
父节点
当前提交
7e3d437d0a
共有 2 个文件被更改,包括 10 次插入2 次删除
  1. 5 1
      Modules/CheckCCompilerFlag.cmake
  2. 5 1
      Modules/CheckCXXCompilerFlag.cmake

+ 5 - 1
Modules/CheckCCompilerFlag.cmake

@@ -17,7 +17,11 @@ INCLUDE(CheckCSourceCompiles)
 MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
    SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
    SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-   CHECK_C_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT})
+   CHECK_C_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT}
+     # Some compilers do not fail with a bad flag
+     FAIL_REGEX "unrecognized option"                       # GNU
+     FAIL_REGEX "ignoring unknown option"                   # MSVC
+     )
    SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
 ENDMACRO (CHECK_C_COMPILER_FLAG)
 

+ 5 - 1
Modules/CheckCXXCompilerFlag.cmake

@@ -17,7 +17,11 @@ INCLUDE(CheckCXXSourceCompiles)
 MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT)
    SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
    SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-   CHECK_CXX_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT})
+   CHECK_CXX_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT}
+     # Some compilers do not fail with a bad flag
+     FAIL_REGEX "unrecognized option"                       # GNU
+     FAIL_REGEX "ignoring unknown option"                   # MSVC
+     )
    SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
 ENDMACRO (CHECK_CXX_COMPILER_FLAG)