Преглед изворни кода

ENH: Added helper cmake function ctkFunctionCheckCompilerFlags allowing to check if given compiler flags are supported

 If the flag(s) is/are supported, they will be appended to the string identified by RESULT_VAR

 Usage:
   ctkFunctionCheckCompilerFlags(FLAGS_TO_CHECK VALID_FLAGS_VAR) Usage:

 Example:

   set(myflags)
   ctkFunctionCheckCompilerFlags("-fprofile-arcs" myflags)
   message(1-myflags:${myflags})
   ctkFunctionCheckCompilerFlags("-fauto-bugfix" myflags)
   message(2-myflags:${myflags})
   ctkFunctionCheckCompilerFlags("-Wall" myflags)
   message(1-myflags:${myflags})

   The output will be:
    1-myflags: -fprofile-arcs
    2-myflags: -fprofile-arcs
    3-myflags: -fprofile-arcs -Wall
Jean-Christophe Fillion-Robin пре 15 година
родитељ
комит
6d30c5e1cd
1 измењених фајлова са 53 додато и 0 уклоњено
  1. 53 0
      CMake/ctkFunctionCheckCompilerFlags.cmake

+ 53 - 0
CMake/ctkFunctionCheckCompilerFlags.cmake

@@ -0,0 +1,53 @@
+
+
+#
+# Helper macro allowing to check if the given flags are supported 
+# by the underlying build tool
+#
+# If the flag(s) is/are supported, they will be appended to the string identified by RESULT_VAR
+#
+# Usage:
+#   ctkFunctionCheckCompilerFlags(FLAGS_TO_CHECK VALID_FLAGS_VAR)
+#
+# Example:
+#
+#   set(myflags)
+#   ctkFunctionCheckCompilerFlags("-fprofile-arcs" myflags)
+#   message(1-myflags:${myflags})
+#   ctkFunctionCheckCompilerFlags("-fauto-bugfix" myflags)
+#   message(2-myflags:${myflags})
+#   ctkFunctionCheckCompilerFlags("-Wall" myflags)
+#   message(1-myflags:${myflags})
+#
+#   The output will be:
+#    1-myflags: -fprofile-arcs
+#    2-myflags: -fprofile-arcs
+#    3-myflags: -fprofile-arcs -Wall
+
+FUNCTION(ctkFunctionCheckCompilerFlags CXX_FLAGS_TO_TEST RESULT_VAR)
+  
+  IF(CXX_FLAGS_TO_TEST STREQUAL "")
+    MESSAGE(FATAL_ERROR "CXX_FLAGS_TO_TEST shouldn't be empty")
+  ENDIF()
+  
+  SET(bindir ${CMAKE_BINARY_DIR})
+  SET(srcfile ${bindir}/ctkFunctionCheckCompilerFlags.cpp)
+  
+  FILE(WRITE ${srcfile} "
+#include <iostream>
+int main(int, char**) { std::cout << \"Rock climbing is awesome\" << std::endl;}
+")
+  
+  SET(is_valid 0)
+  TRY_COMPILE(
+    is_valid ${bindir} ${srcfile}
+    CMAKE_FLAGS "-DCMAKE_CXX_FLAGS:STRING=${CXX_FLAGS_TO_TEST}"
+    )
+  
+  IF(is_valid)
+    SET(${RESULT_VAR} "${${RESULT_VAR}} ${CXX_FLAGS_TO_TEST}" PARENT_SCOPE)
+  ENDIF()
+  
+  MESSAGE(STATUS "Compiler Flags [${CXX_FLAGS_TO_TEST}] supported")
+ENDFUNCTION()
+