Задать вопрос
hitakiri
@hitakiri

Как заставить CMake работать только с нужным компилятором?

Возникла проблема - запускать cmake только с компилятором clang. На Винде. Если запускать cmake из командной строки с заданными параметрами:
cmake ..
 -DCMAKE_BUILD_TYPE:STRING=Debug
 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE 
 -DCMAKE_C_COMPILER:FILEPATH=C:\Program Files\LLVM\bin\clang.exe 
-DCMAKE_CXX_COMPILER:FILEPATH=C:\Program Files\LLVM\bin\clang++.exe


то всё работает корректно.
Но если я пытаюсь описать это в CMakeLists.txt :
project(test)

find_program(CLANG_C_PATH clang)
find_program(CLANG_CXX_PATH clang++)

if (CLANG_C_PATH AND CLANG_CXX_PATH)
	set(CXX "${CLANG_CXX_PATH}") 
	set(CC "${CLANG_C_PATH}")
	
	set(CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE)
	
	set(CMAKE_C_COMPILER:FILEPATH = "${CLANG_C_PATH}")
	set(CMAKE_CXX_COMPILER:FILEPATH = "${CLANG_CXX_PATH}")

	message("Clang Found - " "${CLANG_CXX_PATH}")
	message("Clang++ Found - " "${CLANG_C_PATH}")
else()
    message("Clang not Found.")
endif()

find_program(CLANG_COMPILER clang)
find_program(CLANGXX_COMPILER clang++)

if (CLANG_COMPILER AND CLANGXX_COMPILER)
	set(CMAKE_CXX_COMPILER "${CLANGXX_COMPILER}") 
	set(CMAKE_C_COMPILER "${CLANG_COMPILER}") 
	message("Clang Found")
else()
    message("Clang not Found.")
endif()


то при команде в виндузовом терминале:
cd build
cmake ..


Все равно запускает компилятор cl :
-- Building for: Visual Studio 17 2022
-- The C compiler identification is MSVC 19.44.35211.0
-- The CXX compiler identification is MSVC 19.44.35211.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/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/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Clang Found - C:/Program Files/LLVM/bin/clang++.exe
Clang++ Found - C:/Program Files/LLVM/bin/clang.exe
Clang Found


т.е cmake сначала задаёт компилятор cl, а только потом начитает искать clang. Как так?
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы