summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2019-09-10 18:31:53 +0200
committerCristian Adam <cristian.adam@qt.io>2019-09-19 11:38:34 +0000
commit4a20a596c8dd79ea3e9ac3b0d1b215547f997859 (patch)
tree38daf715421c6ae6cfc5a53509770d5cc8fc6aad /cmake
parentccab8354551ab1e0b4c79bba66469e32945a750b (diff)
downloadqt-creator-4a20a596c8dd79ea3e9ac3b0d1b215547f997859.tar.gz
CMake Build: Use shared precompile headers
This will make the build directory size smaller, as only two pch files will be generated. Not one for every target. Change-Id: I3eec91e7536eab1c62bff8843f075f0ef7b5fff6 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtCreatorAPI.cmake44
1 files changed, 34 insertions, 10 deletions
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake
index 5e3ea2534c..4e7aca2d5e 100644
--- a/cmake/QtCreatorAPI.cmake
+++ b/cmake/QtCreatorAPI.cmake
@@ -13,6 +13,10 @@ list(APPEND DEFAULT_DEFINES
QT_USE_FAST_CONCATENATION
)
+if (WIN32)
+ list(APPEND DEFAULT_DEFINES UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS)
+endif()
+
#
# Setup path handling
#
@@ -284,11 +288,8 @@ endfunction()
function(enable_pch target)
if (BUILD_WITH_PCH)
- get_target_property(target_sources ${target} SOURCES)
- list(LENGTH target_sources target_sources_number)
- if (${target_sources_number} GREATER "3")
- set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_pch.h")
-
+ get_target_property(target_type ${target} TYPE)
+ if (NOT ${target_type} STREQUAL "OBJECT_LIBRARY")
function(_recursively_collect_dependencies input_target)
get_target_property(input_type ${input_target} TYPE)
if (${input_type} STREQUAL "INTERFACE_LIBRARY")
@@ -305,15 +306,38 @@ function(enable_pch target)
endfunction()
_recursively_collect_dependencies(${target})
+ function(_add_pch_target pch_target pch_file pch_dependency)
+ if (EXISTS ${pch_file})
+ add_library(${pch_target} STATIC
+ ${CMAKE_BINARY_DIR}/empy_pch.cpp)
+ target_compile_definitions(${pch_target} PRIVATE ${DEFAULT_DEFINES})
+ set_target_properties(${pch_target} PROPERTIES
+ PRECOMPILE_HEADERS ${pch_file})
+ target_link_libraries(${pch_target} PRIVATE ${pch_dependency})
+ endif()
+ endfunction()
+
+ if (NOT TARGET QtCreatorPchGui AND NOT TARGET QtCreatorPchConsole)
+ file(WRITE ${CMAKE_BINARY_DIR}/empy_pch.cpp.in "/*empty file*/")
+ configure_file(
+ ${CMAKE_BINARY_DIR}/empy_pch.cpp.in
+ ${CMAKE_BINARY_DIR}/empy_pch.cpp)
+
+ _add_pch_target(QtCreatorPchGui
+ "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h" Qt5::Widgets)
+ _add_pch_target(QtCreatorPchConsole
+ "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_pch.h" Qt5::Core)
+ endif()
+
+ set(PCH_TARGET QtCreatorPchConsole)
if ("Qt5::Widgets" IN_LIST dependencies)
- set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h")
+ set(PCH_TARGET QtCreatorPchGui)
endif()
- if (EXISTS ${PCH_FILE})
- set_target_properties(${target} PROPERTIES PRECOMPILE_HEADERS ${PCH_FILE})
+ if (TARGET ${PCH_TARGET})
+ set_target_properties(${target} PROPERTIES
+ PRECOMPILE_HEADERS_REUSE_FROM ${PCH_TARGET})
endif()
- elseif(WITH_DEBUG_CMAKE)
- message(STATUS "Skipped PCH for ${target}")
endif()
endif()
endfunction()