diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-08-15 08:57:27 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-08-15 08:57:27 +0200 |
commit | 8201d49ea07fe83eecf6694d690c49ea314d52ca (patch) | |
tree | 18149155174beaf7ea92b1de1e9c406c0c7a0fa2 /cmake | |
parent | 40921421ae7d6ad7c7644e0f7ffe900ccd70ee5e (diff) | |
parent | 85cb98148670f0c74944cb79d093a4342966543f (diff) | |
download | qt-creator-8201d49ea07fe83eecf6694d690c49ea314d52ca.tar.gz |
Merge remote-tracking branch 'origin/4.10'
Change-Id: I4d24269ef040c45e2143dfa86d1be3f7e8008521
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtCreatorAPI.cmake | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index ea959d6787..fddabb8d93 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -250,6 +250,42 @@ function(qtc_plugin_enabled varName name) endif() 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") + + function(_recursively_collect_dependencies input_target) + get_target_property(input_type ${input_target} TYPE) + if (${input_type} STREQUAL "INTERFACE_LIBRARY") + set(prefix "INTERFACE_") + endif() + get_target_property(link_libraries ${input_target} ${prefix}LINK_LIBRARIES) + foreach(library IN LISTS link_libraries) + if(TARGET ${library} AND NOT ${library} IN_LIST dependencies) + list(APPEND dependencies ${library}) + _recursively_collect_dependencies(${library}) + endif() + endforeach() + set(dependencies ${dependencies} PARENT_SCOPE) + endfunction() + _recursively_collect_dependencies(${target}) + + if ("Qt5::Widgets" IN_LIST dependencies) + set(PCH_FILE "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_gui_pch.h") + endif() + + if (EXISTS ${PCH_FILE}) + set_target_properties(${target} PROPERTIES PRECOMPILE_HEADERS ${PCH_FILE}) + endif() + elseif(WITH_DEBUG_CMAKE) + message(STATUS "Skipped PCH for ${target}") + endif() + endif() +endfunction() + # # Public API functions # @@ -330,6 +366,7 @@ function(add_qtc_library name) ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${IDE_LIBRARY_PATH}" ${_arg_PROPERTIES} ) + enable_pch(${name}) unset(NAMELINK_OPTION) if (library_type STREQUAL "SHARED") @@ -534,6 +571,7 @@ function(add_qtc_plugin target_name) OUTPUT_NAME "${name}" ${_arg_PROPERTIES} ) + enable_pch(${target_name}) foreach(file IN LISTS _arg_EXPLICIT_MOC) set_explicit_moc(${target_name} "${file}") @@ -595,6 +633,15 @@ function(extend_qtc_target target_name) set(_arg_SOURCES ${prefixed_sources}) endif() target_sources(${target_name} PRIVATE ${_arg_SOURCES}) + + if (APPLE AND BUILD_WITH_PCH) + foreach(source IN LISTS _arg_SOURCES) + if (source MATCHES "^.*\.mm$") + set_source_files_properties(${source} PROPERTIES SKIP_PRECOMPILE_HEADERS ON) + endif() + endforeach() + endif() + set_public_headers(${target_name} "${_arg_SOURCES}") foreach(file IN LISTS _arg_EXPLICIT_MOC) @@ -662,6 +709,7 @@ function(add_qtc_executable name) RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${_DESTINATION}" ${_arg_PROPERTIES} ) + enable_pch(${name}) if (NOT _arg_SKIP_INSTALL) install(TARGETS ${name} DESTINATION "${_DESTINATION}") @@ -702,6 +750,7 @@ function(add_qtc_test name) BUILD_RPATH "${_RPATH_BASE}/${_RPATH}" INSTALL_RPATH "${_RPATH_BASE}/${_RPATH}" ) + enable_pch(${name}) if (NOT _arg_GTEST) add_test(NAME ${name} COMMAND ${name}) |