VS: Double consecutive generation changes AdditionalInputs
OS: Windows 7
git version 2.43.0.windows.1
cmake version 3.28.2
Visual Studio 2022 (17.6.4)
Create CMakeLists.txt with the following content:
cmake_minimum_required(VERSION 3.28.2)
project(minexample)
add_executable(${PROJECT_NAME} main.cpp)
Create main.cpp with the following content:
#include <cstdio>
int main() {
std::printf("Test\n");
return 0;
}
Generate project files:
cmake -B build .
Create copy of generated build folder for subsequent comparison:
cp -r build build0
Generate project files again (into the same build folder):
cmake -B build .
Note: source files have not been changed, and the project was not built.
Compare folders build and build0. The following files are different:
CMakeFiles\generate.stamp.depend
ALL_BUILD.vcxproj
minexample.vcxproj
ZERO_CHECK.vcxproj
Initial version of generate.stamp.depend is much bigger and contains a lot of unnecessary dependencies (seems all possible compilers were included). Second version seems correct (contains only MSVC compiler).
As a result, initial versions of vcxproj files also contain all the extra stuff:
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCCompiler.cmake.in;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCCompilerABI.c;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCXXCompiler.cmake.in;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCXXCompilerABI.cpp;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCXXInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCommonLanguageInclude.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCompilerIdDetection.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCXXCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCompileFeatures.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCompilerABI.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineCompilerId.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineRCCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeDetermineSystem.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeFindBinUtils.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeGenericSystem.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeInitializeConfigs.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeLanguageInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeParseImplicitIncludeInfo.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeParseImplicitLinkInfo.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeParseLibraryArchitecture.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeRCCompiler.cmake.in;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeRCInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeSystem.cmake.in;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeSystemSpecificInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeSystemSpecificInitialize.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeTestCCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeTestCXXCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeTestCompilerCommon.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeTestRCCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\ADSP-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\ARMCC-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\ARMClang-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\AppleClang-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Borland-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Bruce-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\CMakeCommonCompilerMacros.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Clang-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Clang-DetermineCompilerInternal.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Comeau-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Compaq-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Compaq-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Cray-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\CrayClang-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Embarcadero-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Fujitsu-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\FujitsuClang-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\GHS-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\GNU-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\GNU-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\HP-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\HP-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IAR-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IBMCPP-C-DetermineVersionInternal.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IBMCPP-CXX-DetermineVersionInternal.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IBMClang-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IBMClang-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Intel-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\IntelLLVM-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\LCC-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\LCC-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC-C.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC-CXX.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\NVHPC-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\NVIDIA-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\OpenWatcom-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\OrangeC-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\PGI-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\PathScale-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\SCO-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\SDCC-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\SunPro-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\SunPro-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\TI-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Tasking-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\TinyCC-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\VisualAge-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\VisualAge-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\Watcom-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\XL-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\XL-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\XLClang-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\XLClang-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\zOS-C-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\zOS-CXX-DetermineCompiler.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CompilerId\VS-10.vcxproj.in;
C:\Program Files\CMake\share\cmake-3.28\Modules\Internal\FeatureTesting.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-Determine-CXX.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-Initialize.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC-C.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC-CXX.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\WindowsPaths.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeCCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeCXXCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeRCCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeSystem.cmake;
%(AdditionalInputs)
</AdditionalInputs>
Compare to the second cleaner version:
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCXXInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeCommonLanguageInclude.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeGenericSystem.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeInitializeConfigs.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeLanguageInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeRCInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeSystemSpecificInformation.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\CMakeSystemSpecificInitialize.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\CMakeCommonCompilerMacros.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC-C.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC-CXX.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Compiler\MSVC.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-Initialize.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC-C.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC-CXX.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows-MSVC.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\Windows.cmake;
C:\Program Files\CMake\share\cmake-3.28\Modules\Platform\WindowsPaths.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeCCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeCXXCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeRCCompiler.cmake;
D:\minexample\build\CMakeFiles\3.28.2\CMakeSystem.cmake;
%(AdditionalInputs)
</AdditionalInputs>
Of course this is repeated for all configurations in all vcxproj files.