forked from qt-creator/qt-creator
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:
@@ -13,6 +13,10 @@ list(APPEND DEFAULT_DEFINES
|
|||||||
QT_USE_FAST_CONCATENATION
|
QT_USE_FAST_CONCATENATION
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND DEFAULT_DEFINES UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Setup path handling
|
# Setup path handling
|
||||||
#
|
#
|
||||||
@@ -284,11 +288,8 @@ endfunction()
|
|||||||
|
|
||||||
function(enable_pch target)
|
function(enable_pch target)
|
||||||
if (BUILD_WITH_PCH)
|
if (BUILD_WITH_PCH)
|
||||||
get_target_property(target_sources ${target} SOURCES)
|
get_target_property(target_type ${target} TYPE)
|
||||||
list(LENGTH target_sources target_sources_number)
|
if (NOT ${target_type} STREQUAL "OBJECT_LIBRARY")
|
||||||
if (${target_sources_number} GREATER "3")
|
|
||||||
set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_pch.h")
|
|
||||||
|
|
||||||
function(_recursively_collect_dependencies input_target)
|
function(_recursively_collect_dependencies input_target)
|
||||||
get_target_property(input_type ${input_target} TYPE)
|
get_target_property(input_type ${input_target} TYPE)
|
||||||
if (${input_type} STREQUAL "INTERFACE_LIBRARY")
|
if (${input_type} STREQUAL "INTERFACE_LIBRARY")
|
||||||
@@ -305,15 +306,38 @@ function(enable_pch target)
|
|||||||
endfunction()
|
endfunction()
|
||||||
_recursively_collect_dependencies(${target})
|
_recursively_collect_dependencies(${target})
|
||||||
|
|
||||||
if ("Qt5::Widgets" IN_LIST dependencies)
|
function(_add_pch_target pch_target pch_file pch_dependency)
|
||||||
set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h")
|
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()
|
endif()
|
||||||
|
|
||||||
if (EXISTS ${PCH_FILE})
|
set(PCH_TARGET QtCreatorPchConsole)
|
||||||
set_target_properties(${target} PROPERTIES PRECOMPILE_HEADERS ${PCH_FILE})
|
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()
|
endif()
|
||||||
elseif(WITH_DEBUG_CMAKE)
|
|
||||||
message(STATUS "Skipped PCH for ${target}")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
add_qtc_library(KSyntaxHighlighting STATIC
|
add_qtc_library(KSyntaxHighlighting STATIC
|
||||||
PUBLIC_INCLUDES autogenerated/ autogenerated/src/lib src/lib
|
PUBLIC_INCLUDES autogenerated/ autogenerated/src/lib src/lib
|
||||||
PUBLIC_DEFINES KSYNTAXHIGHLIGHTING_LIBRARY
|
PUBLIC_DEFINES KSYNTAXHIGHLIGHTING_LIBRARY
|
||||||
DEPENDS Qt5::Network Qt5::Gui
|
DEPENDS Qt5::Network Qt5::Widgets
|
||||||
SOURCES
|
SOURCES
|
||||||
autogenerated/src/lib/ksyntaxhighlighting_logging.cpp autogenerated/src/lib/ksyntaxhighlighting_logging.h
|
autogenerated/src/lib/ksyntaxhighlighting_logging.cpp autogenerated/src/lib/ksyntaxhighlighting_logging.h
|
||||||
autogenerated/ksyntaxhighlighting_version.h
|
autogenerated/ksyntaxhighlighting_version.h
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
add_qtc_library(ExtensionSystem
|
add_qtc_library(ExtensionSystem
|
||||||
DEPENDS Aggregation Utils Qt5::Core Qt5::Widgets
|
DEPENDS Aggregation Utils
|
||||||
PUBLIC_DEPENDS Qt5::Core
|
PUBLIC_DEPENDS Qt5::Core Qt5::Widgets
|
||||||
SOURCES
|
SOURCES
|
||||||
extensionsystem_global.h
|
extensionsystem_global.h
|
||||||
invoker.cpp invoker.h
|
invoker.cpp invoker.h
|
||||||
|
@@ -6,6 +6,7 @@ endif()
|
|||||||
|
|
||||||
add_qtc_library(Tracing
|
add_qtc_library(Tracing
|
||||||
DEPENDS Utils Qt5::Qml Qt5::Quick
|
DEPENDS Utils Qt5::Qml Qt5::Quick
|
||||||
|
PUBLIC_DEPENDS Qt5::Widgets
|
||||||
SOURCES ${TEST_SOURCES}
|
SOURCES ${TEST_SOURCES}
|
||||||
flamegraph.cpp flamegraph.h
|
flamegraph.cpp flamegraph.h
|
||||||
flamegraphattached.h
|
flamegraphattached.h
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
add_qtc_test(tst_toolchaincache
|
add_qtc_test(tst_toolchaincache
|
||||||
DEPENDS ProjectExplorer Qt5::Gui
|
DEPENDS ProjectExplorer Qt5::Widgets
|
||||||
INCLUDES "${PROJECT_SOURCE_DIR}/src/libs"
|
INCLUDES "${PROJECT_SOURCE_DIR}/src/libs"
|
||||||
SOURCES tst_toolchaincache.cpp
|
SOURCES tst_toolchaincache.cpp
|
||||||
)
|
)
|
||||||
|
@@ -18,8 +18,6 @@ add_qtc_test(unittest GTEST
|
|||||||
clangrefactoringbackend_lib clangbackend_lib clangpchmanagerbackend_lib
|
clangrefactoringbackend_lib clangbackend_lib clangpchmanagerbackend_lib
|
||||||
CPlusPlus Sqlite Utils
|
CPlusPlus Sqlite Utils
|
||||||
DEFINES
|
DEFINES
|
||||||
QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII
|
|
||||||
QT_USE_FAST_OPERATOR_PLUS QT_USE_FAST_CONCATENATION
|
|
||||||
UNIT_TESTS
|
UNIT_TESTS
|
||||||
DONT_CHECK_MESSAGE_COUNTER
|
DONT_CHECK_MESSAGE_COUNTER
|
||||||
QTC_RESOURCE_DIR="${PROJECT_SOURCE_DIR}/share/qtcreator"
|
QTC_RESOURCE_DIR="${PROJECT_SOURCE_DIR}/share/qtcreator"
|
||||||
|
Reference in New Issue
Block a user