Forráskód Böngészése

Fix ctkFunctionCheckCompilerFlags so that successive invocation works

Internally, the macro CMAKE_CXX_ACCEPTS_FLAG calls TRY_COMPILE. To avoid
the cost of compiling the test each time the project is configured, the variable set by
the macro is added to the cache so that following invocation of the macro with
the same variable name skip the compilation step.

For that same reason, ctkFunctionCheckCompilerFlags function appends a unique suffix to
the HAS_FLAG variable. This suffix is created using a 'clean version' of the flag to test
Jean-Christophe Fillion-Robin 14 éve
szülő
commit
95b5aac71d
1 módosított fájl, 10 hozzáadás és 3 törlés
  1. 10 3
      CMake/ctkFunctionCheckCompilerFlags.cmake

+ 10 - 3
CMake/ctkFunctionCheckCompilerFlags.cmake

@@ -32,9 +32,16 @@ FUNCTION(ctkFunctionCheckCompilerFlags CXX_FLAG_TO_TEST RESULT_VAR)
     MESSAGE(FATAL_ERROR "CXX_FLAG_TO_TEST shouldn't be empty")
   ENDIF()
   
-  CHECK_CXX_ACCEPTS_FLAG(${CXX_FLAG_TO_TEST} HAS_FLAG)
-
-  IF(HAS_FLAG)
+  # Internally, the macro CMAKE_CXX_ACCEPTS_FLAG calls TRY_COMPILE. To avoid 
+  # the cost of compiling the test each time the project is configured, the variable set by 
+  # the macro is added to the cache so that following invocation of the macro with 
+  # the same variable name skip the compilation step. 
+  # For that same reason, ctkFunctionCheckCompilerFlags function appends a unique suffix to 
+  # the HAS_FLAG variable. This suffix is created using a 'clean version' of the flag to test.
+  STRING(REGEX REPLACE "-\\s\\$\\+\\*\\{\\}\\(\\)\\#" "" suffix ${CXX_FLAG_TO_TEST})
+  CHECK_CXX_ACCEPTS_FLAG(${CXX_FLAG_TO_TEST} HAS_FLAG_${suffix})
+  
+  IF(HAS_FLAG_${suffix})
     SET(${RESULT_VAR} "${${RESULT_VAR}} ${CXX_FLAG_TO_TEST}" PARENT_SCOPE)
   ENDIF()