diff --git a/cmake/precompiled_headers.cmake b/cmake/precompiled_headers.cmake index 0130c1533..ed1f62521 100644 --- a/cmake/precompiled_headers.cmake +++ b/cmake/precompiled_headers.cmake @@ -14,8 +14,19 @@ function(enable_precompiled_headers PRECOMPILED_HEADER SOURCE_VARIABLE_NAME) 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) - FILE(WRITE ${pch_unity} "// Precompiled header unity generated by CMake\n") - FILE(APPEND ${pch_unity} "#include <${pch_abs}>\n") + 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.