From 220d923e65f47737f4f6718705d44c1bb3153d3d Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Thu, 19 Apr 2018 10:16:04 +0300 Subject: [PATCH] Do not write g_pch.cpp if it's already up-to-date This eliminates rebuilding of main executable by MSVC on every project generation by CMake --- cmake/precompiled_headers.cmake | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) 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.