CMakeFindBinUtils: Behavior change between CMake 3.20.5 and CMake 3.21.1
I have a llvm-mingw build of Qt 5.15.2, clang 12 that I use to do a Qt Creator build.
My (CMake) script does:
set(ENV{PATH} "${CMAKE_CURRENT_LIST_DIR}/Toolchain/llvm-mingw-lldbtest-x86_64/bin;$ENV{PATH}")
set(ENV{CC} clang)
set(ENV{CXX} clang++)
execute_process(COMMAND
${CMAKE_COMMAND}
-D "CMAKE_PREFIX_PATH=${CMAKE_CURRENT_LIST_DIR}/Qt/5.15.2/llvmmingw12_64;${CMAKE_CURRENT_LIST_DIR}/Clang-for-QtCreator/llvm-mingw"
...
With CMake 3.20.5 it works as I expect it:
CMAKE_ADDR2LINE:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/addr2line.exe
CMAKE_AR:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/ar.exe
CMAKE_CXX_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/clang++.exe
CMAKE_C_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/clang.exe
CMAKE_DLLTOOL:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/dlltool
CMAKE_LINKER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/ld
CMAKE_NM:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/nm.exe
CMAKE_OBJCOPY:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/objcopy.exe
CMAKE_OBJDUMP:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/objdump
CMAKE_RANLIB:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/ranlib.exe
CMAKE_RC_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/windres.exe
CMAKE_READELF:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/readelf.exe
CMAKE_STRIP:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/strip.exe
Clang_DIR:PATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/lib/cmake/clang
All the tools are part of the Toolchain
directory, and only the Clang_DIR
comes from the Clang-for-QtCreator
dir.
With CMake 3.21.1 I got the following:
CMAKE_ADDR2LINE:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-addr2line.exe
CMAKE_AR:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-ar.exe
CMAKE_CXX_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/clang++.exe
CMAKE_C_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/clang.exe
CMAKE_DLLTOOL:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-dlltool.exe
CMAKE_LINKER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/ld.lld.exe
CMAKE_NM:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-nm.exe
CMAKE_OBJCOPY:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-objcopy.exe
CMAKE_OBJDUMP:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-objdump.exe
CMAKE_RANLIB:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-ranlib.exe
CMAKE_RC_COMPILER:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Toolchain/llvm-mingw-lldbtest-x86_64/bin/windres.exe
CMAKE_READELF:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-readelf.exe
CMAKE_STRIP:FILEPATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/bin/llvm-strip.exe
Clang_DIR:PATH=C:/Projects/QtCreator-llvm-mingw/Clang-for-QtCreator/llvm-mingw/lib/cmake/clang
Which shows a different picture. It looks like the tools from CMakeFindBinUtils.cmake
are taken from CMAKE_PREFIX_PATH
which has precedence over PATH
and differs from what CMake 3.20.5 is using.
I used CMAKE_PREFIX_PATH
to specify the paths for find_package
, and I expect CMake 3.21 to work as CMake 3.20.