mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-29 23:42:08 +00:00
45 lines
No EOL
1.8 KiB
CMake
45 lines
No EOL
1.8 KiB
CMake
#
|
|
# Christoph Heindl 2010
|
|
# Precompiled Headers Demo
|
|
# http://cheind.wordpress.com
|
|
#
|
|
|
|
# Instructs the MSVC toolset to use the precompiled header PRECOMPILED_HEADER
|
|
# for each source file given in the collection named by SOURCE_VARIABLE_NAME.
|
|
function(enable_precompiled_headers PRECOMPILED_HEADER SOURCE_VARIABLE_NAME)
|
|
if(MSVC)
|
|
set(files ${${SOURCE_VARIABLE_NAME}})
|
|
|
|
# Generate precompiled header translation unit
|
|
get_filename_component(pch_basename ${PRECOMPILED_HEADER} NAME_WE)
|
|
set(pch_abs ${CMAKE_CURRENT_SOURCE_DIR}/${PRECOMPILED_HEADER})
|
|
set(pch_unity ${CMAKE_CURRENT_BINARY_DIR}/${pch_basename}.cpp)
|
|
set(pch_content "// Precompiled header unity generated by CMake\n#include <${pch_abs}>\n")
|
|
# Read .cpp if exists
|
|
if(EXISTS ${pch_unity})
|
|
file(READ ${pch_unity} pch_content_prev)
|
|
endif()
|
|
# Compare existing .cpp content with the actual one
|
|
if (pch_content_prev AND pch_content STREQUAL pch_content_prev)
|
|
unset(pch_content)
|
|
endif()
|
|
# Write .cpp if it's out-of-date
|
|
if (pch_content)
|
|
FILE(WRITE ${pch_unity} "${pch_content}")
|
|
endif()
|
|
set_source_files_properties(${pch_unity} PROPERTIES COMPILE_FLAGS "/Yc\"${pch_abs}\"")
|
|
|
|
# Update properties of source files to use the precompiled header.
|
|
# Additionally, force the inclusion of the precompiled header at beginning of each source file.
|
|
foreach(source_file ${files} )
|
|
set_source_files_properties(
|
|
${source_file}
|
|
PROPERTIES COMPILE_FLAGS
|
|
"/Yu\"${pch_abs}\" /FI\"${pch_abs}\""
|
|
)
|
|
endforeach(source_file)
|
|
|
|
# Finally, update the source file collection to contain the precompiled header translation unit
|
|
set(${SOURCE_VARIABLE_NAME} ${${SOURCE_VARIABLE_NAME}} ${pch_unity} PARENT_SCOPE)
|
|
endif(MSVC)
|
|
endfunction(enable_precompiled_headers) |