presets: Unavoidable unused CMAKE_TOOLCHAIN_FILE variable warning on reconfigure
When using CMake presets to specify a toolchain file, a second cmake invocation produces an annoying warning that cannot be avoided about the CMAKE_TOOLCHAIN_FILE
variable being specified, but not used.
How to reproduce:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(cmake_clion_bugs_repro)
# CMakePresets.json
{
"version": 6,
"configurePresets": [
{
"name": "msvc",
"toolchainFile": "msvc-toolchain.cmake",
"binaryDir": "build/msvc",
"generator": "Ninja"
},
{
"name": "llvm",
"toolchainFile": "llvm-toolchain.cmake",
"binaryDir": "build/llvm",
"generator": "Ninja"
}
]
}
Toolchain files
# msvc-toolchain.cmake
set(VS_INSTALLATION_PATH "C:/Program Files/Microsoft Visual Studio/2022/Professional")
set(VS_TOOLSET_VERSION "14.34.31933")
set(WINDOWS_KITS_10_PATH "C:/Program Files (x86)/Windows Kits/10")
set(WINDOWS_KITS_10_VERSION "10.0.22000.0")
find_program(CMAKE_C_COMPILER cl.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/bin/Hostx64/x64 REQUIRED)
find_program(CMAKE_CXX_COMPILER cl.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/bin/Hostx64/x64 REQUIRED)
find_program(CMAKE_LINKER link.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/bin/Hostx64/x64 REQUIRED)
find_program(CMAKE_MT mt.exe HINTS ${WINDOWS_KITS_10_PATH}/bin/${WINDOWS_KITS_10_VERSION}/x64 REQUIRED)
find_program(CMAKE_RC_COMPILER rc.exe HINTS ${WINDOWS_KITS_10_PATH}/bin/${WINDOWS_KITS_10_VERSION}/x64 REQUIRED)
include_directories(${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/atlmfc/include)
include_directories(${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/include)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/shared)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/ucrt)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/um)
link_directories(${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/atlmfc/lib/x64)
link_directories(${VS_INSTALLATION_PATH}/VC/Tools/MSVC/${VS_TOOLSET_VERSION}/lib/x64)
link_directories(${WINDOWS_KITS_10_PATH}/Lib/${WINDOWS_KITS_10_VERSION}/ucrt/x64)
link_directories(${WINDOWS_KITS_10_PATH}/Lib/${WINDOWS_KITS_10_VERSION}/um/x64)
# llvm-toolchain.cmake
set(VS_INSTALLATION_PATH "C:/Program Files/Microsoft Visual Studio/2022/Professional")
set(CLANG_VERSION "15.0.1")
set(WINDOWS_KITS_10_PATH "C:/Program Files (x86)/Windows Kits/10")
set(WINDOWS_KITS_10_VERSION "10.0.22000.0")
find_program(CMAKE_C_COMPILER clang.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/Llvm/x64/bin REQUIRED)
find_program(CMAKE_CXX_COMPILER clang++.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/Llvm/x64/bin REQUIRED)
find_program(CMAKE_LINKER lld-link.exe HINTS ${VS_INSTALLATION_PATH}/VC/Tools/Llvm/x64/bin REQUIRED)
find_program(CMAKE_MT mt.exe HINTS ${WINDOWS_KITS_10_PATH}/bin/${WINDOWS_KITS_10_VERSION}/x64 REQUIRED)
find_program(CMAKE_RC_COMPILER rc.exe HINTS ${WINDOWS_KITS_10_PATH}/bin/${WINDOWS_KITS_10_VERSION}/x64 REQUIRED)
include_directories(${VS_INSTALLATION_PATH}/VC/Tools/Llvm/x64/lib/clang/${CLANG_VERSION}/include)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/shared)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/ucrt)
include_directories(${WINDOWS_KITS_10_PATH}/Include/${WINDOWS_KITS_10_VERSION}/um)
link_directories(${VS_INSTALLATION_PATH}/VC/Tools/Llvm/x64/lib/clang/${CLANG_VERSION}/lib/windows)
link_directories(${WINDOWS_KITS_10_PATH}/Lib/${WINDOWS_KITS_10_VERSION}/ucrt/x64)
link_directories(${WINDOWS_KITS_10_PATH}/Lib/${WINDOWS_KITS_10_VERSION}/um/x64)
First invocation of CMake results in this:
$ cmake --preset msvc
Preset CMake variables:
CMAKE_TOOLCHAIN_FILE:FILEPATH="msvc-toolchain.cmake"
-- The C compiler identification is MSVC 19.34.31933.0
-- The CXX compiler identification is MSVC 19.34.31933.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (3.3s)
-- Generating done (0.0s)
-- Build files have been written to: D:/devel/cmake-bugs-repro/build/msvc
Then the second invocation generates an unwanted warning that cannot be avoided.
$ cmake --preset msvc
Preset CMake variables:
CMAKE_TOOLCHAIN_FILE:FILEPATH="msvc-toolchain.cmake"
-- Configuring done (0.1s)
-- Generating done (0.0s)
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_TOOLCHAIN_FILE
-- Build files have been written to: D:/devel/cmake-bugs-repro/build/msvc
Using both msvc
and llvm
presets from the example produce similar results. I reproduced this issue with CMake version 3.26.4.
I think this warning is wrong, as the user cannot avoid passing the CMAKE_TOOLCHAIN_FILE
in this context. Silencing permanently this warning (using --no-warn-unused-cli
or warnings.unusedCli
) is not acceptable IMHO, as the warning is actually useful!
Thank you for your support on this.