aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaios <naios-dev@live.de>2015-10-07 02:11:51 +0200
committerNaios <naios-dev@live.de>2016-02-22 16:25:54 +0100
commita974574d6e810799298e82776ccd85be0ae6d4d5 (patch)
treeab1eef83581bb9fb4551204073c7ab473585fb0e
parent9e43365b3d7817b128ecfc6bfd74f4b2b6fc7c69 (diff)
CMake: Add the possibility to pass an arbitrary count of targets to add_cxx_pch.
* A PCH is still generated for every target which was passed to the macro * Resolves naming conflicts when using the same PCH header from multiple projects * Ref #15671
-rw-r--r--cmake/macros/FindPCHSupport.cmake71
1 files changed, 45 insertions, 26 deletions
diff --git a/cmake/macros/FindPCHSupport.cmake b/cmake/macros/FindPCHSupport.cmake
index b068b69c26b..49d4be904d1 100644
--- a/cmake/macros/FindPCHSupport.cmake
+++ b/cmake/macros/FindPCHSupport.cmake
@@ -11,7 +11,7 @@ FUNCTION(GET_COMMON_PCH_PARAMS PCH_HEADER PCH_FE INCLUDE_PREFIX)
SET(INCLUDE_FLAGS ${INCLUDE_FLAGS_LIST} PARENT_SCOPE)
ENDFUNCTION(GET_COMMON_PCH_PARAMS)
-FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT)
+FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME_LIST INCLUDE_FLAGS IN PCH_SRC OUT)
IF (CMAKE_BUILD_TYPE)
STRING(TOUPPER _${CMAKE_BUILD_TYPE} CURRENT_BUILD_TYPE)
ENDIF ()
@@ -55,50 +55,69 @@ FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT)
DEPENDS ${OUT}
)
- ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N})
+ FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
+ ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N})
+ ENDFOREACH()
+
ENDFUNCTION(GENERATE_CXX_PCH_COMMAND)
-FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME PCH_HEADER PCH_SOURCE)
+FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "gch" "-I")
- GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
- SET_TARGET_PROPERTIES(
- ${TARGET_NAME} PROPERTIES
- COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}"
- )
+ GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
+
+ FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
+ SET_TARGET_PROPERTIES(
+ ${TARGET_NAME} PROPERTIES
+ COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}"
+ )
+ ENDFOREACH()
ENDFUNCTION(ADD_CXX_PCH_GCC)
-FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME PCH_HEADER PCH_SOURCE)
+FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "-I")
- GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
- SET_TARGET_PROPERTIES(
- ${TARGET_NAME} PROPERTIES
- COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}"
- )
+ GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT})
+
+ FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
+ SET_TARGET_PROPERTIES(
+ ${TARGET_NAME} PROPERTIES
+ COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}"
+ )
+ ENDFOREACH()
ENDFUNCTION(ADD_CXX_PCH_CLANG)
-FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME PCH_HEADER PCH_SOURCE)
+FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "/I")
- SET_TARGET_PROPERTIES(
- ${TARGET_NAME} PROPERTIES
- COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}"
- )
+
+ FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
+ SET_TARGET_PROPERTIES(
+ ${TARGET_NAME} PROPERTIES
+ COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}"
+ )
+ ENDFOREACH()
+
SET_SOURCE_FILES_PROPERTIES(
${PCH_SOURCE} PROPERTIES
COMPILE_FLAGS "/Yc${PCH_HEADER_NAME}"
)
ENDFUNCTION(ADD_CXX_PCH_MSVC)
-FUNCTION(ADD_CXX_PCH TARGET_NAME PCH_HEADER PCH_SOURCE)
- IF (MSVC)
- ADD_CXX_PCH_MSVC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
- ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode")
- SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+FUNCTION(ADD_CXX_PCH_XCODE TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
+ FOREACH(TARGET_NAME ${TARGET_NAME_LIST})
+ SET_TARGET_PROPERTIES("${TARGET_NAME}" PROPERTIES
XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES
XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${PCH_HEADER}"
)
+ ENDFOREACH()
+ENDFUNCTION(ADD_CXX_PCH_XCODE)
+
+FUNCTION(ADD_CXX_PCH TARGET_NAME_LIST PCH_HEADER PCH_SOURCE)
+ IF (MSVC)
+ ADD_CXX_PCH_MSVC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
+ ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode")
+ ADD_CXX_PCH_XCODE("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
- ADD_CXX_PCH_CLANG(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
+ ADD_CXX_PCH_CLANG("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
- ADD_CXX_PCH_GCC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE})
+ ADD_CXX_PCH_GCC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE})
ENDIF ()
ENDFUNCTION(ADD_CXX_PCH)