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>
This commit is contained in:
Cristian Adam
2019-09-10 18:31:53 +02:00
parent ccab835455
commit 4a20a596c8
6 changed files with 40 additions and 17 deletions

View File

@@ -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})
if ("Qt5::Widgets" IN_LIST dependencies)
set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h")
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()
if (EXISTS ${PCH_FILE})
set_target_properties(${target} PROPERTIES PRECOMPILE_HEADERS ${PCH_FILE})
set(PCH_TARGET QtCreatorPchConsole)
if ("Qt5::Widgets" IN_LIST dependencies)
set(PCH_TARGET QtCreatorPchGui)
endif()
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()

View File

@@ -1,7 +1,7 @@
add_qtc_library(KSyntaxHighlighting STATIC
PUBLIC_INCLUDES autogenerated/ autogenerated/src/lib src/lib
PUBLIC_DEFINES KSYNTAXHIGHLIGHTING_LIBRARY
DEPENDS Qt5::Network Qt5::Gui
DEPENDS Qt5::Network Qt5::Widgets
SOURCES
autogenerated/src/lib/ksyntaxhighlighting_logging.cpp autogenerated/src/lib/ksyntaxhighlighting_logging.h
autogenerated/ksyntaxhighlighting_version.h

View File

@@ -1,6 +1,6 @@
add_qtc_library(ExtensionSystem
DEPENDS Aggregation Utils Qt5::Core Qt5::Widgets
PUBLIC_DEPENDS Qt5::Core
DEPENDS Aggregation Utils
PUBLIC_DEPENDS Qt5::Core Qt5::Widgets
SOURCES
extensionsystem_global.h
invoker.cpp invoker.h

View File

@@ -6,6 +6,7 @@ endif()
add_qtc_library(Tracing
DEPENDS Utils Qt5::Qml Qt5::Quick
PUBLIC_DEPENDS Qt5::Widgets
SOURCES ${TEST_SOURCES}
flamegraph.cpp flamegraph.h
flamegraphattached.h

View File

@@ -1,5 +1,5 @@
add_qtc_test(tst_toolchaincache
DEPENDS ProjectExplorer Qt5::Gui
DEPENDS ProjectExplorer Qt5::Widgets
INCLUDES "${PROJECT_SOURCE_DIR}/src/libs"
SOURCES tst_toolchaincache.cpp
)

View File

@@ -18,8 +18,6 @@ add_qtc_test(unittest GTEST
clangrefactoringbackend_lib clangbackend_lib clangpchmanagerbackend_lib
CPlusPlus Sqlite Utils
DEFINES
QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII
QT_USE_FAST_OPERATOR_PLUS QT_USE_FAST_CONCATENATION
UNIT_TESTS
DONT_CHECK_MESSAGE_COUNTER
QTC_RESOURCE_DIR="${PROJECT_SOURCE_DIR}/share/qtcreator"