diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index 2880da9f2..e46302144 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -68,11 +68,37 @@ function(export_all_flags _filename) set(_compile_definitions "$") set(_compile_flags "$") set(_compile_options "$") + + #handle config-specific cxx flags + string(TOUPPER ${CMAKE_BUILD_TYPE} _config) + set(_build_cxx_flags ${CMAKE_CXX_FLAGS_${_config}}) + + #handle fpie option + get_target_property(_fpie ${_target} POSITION_INDEPENDENT_CODE) + if (_fpie AND CMAKE_POSITION_INDEPENDENT_CODE) + list(APPEND _compile_options ${CMAKE_CXX_COMPILE_OPTIONS_PIC}) + endif() + + #handle compiler standard (GCC only) + if(CMAKE_COMPILER_IS_GNUCXX) + get_target_property(_cxx_standard ${_target} CXX_STANDARD) + if ((NOT "${_cxx_standard}" STREQUAL NOTFOUND) AND (NOT "${_cxx_standard}" STREQUAL "")) + get_target_property(_cxx_extensions ${_target} CXX_EXTENSIONS) + get_property(_exists TARGET ${_target} PROPERTY CXX_EXTENSIONS SET) + if (NOT _exists OR ${_cxx_extensions}) + list(APPEND _compile_options "-std=gnu++${_cxx_standard}") + else() + list(APPEND _compile_options "-std=c++${_cxx_standard}") + endif() + endif() + endif() + set(_include_directories "$<$:-I$\n>") set(_compile_definitions "$<$:-D$\n>") set(_compile_flags "$<$:$\n>") set(_compile_options "$<$:$\n>") - file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n") + set(_cxx_flags "$<$:${CMAKE_CXX_FLAGS}\n>$<$:${_build_cxx_flags}\n>") + file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}${_cxx_flags}\n") endfunction() function(add_precompiled_header _target _input)