Переменная окружения, используемая CMake для обнаружения инструментов компилятора Visual C++ для ниндзя

У меня Mingw64 GCC 6.3.0 (всегда в PATH) и инструменты компилятора Visual C++ из Visual Studio 2017 RTM (не в PATH).

Если я бегу cmake . -G "MinGW Makefiles", GCC 6.3.0 будет выбран.

Если я бегу cmake . -G "Ninja", GCC 6.3.0 будет выбран.

Мои инструменты компилятора Visual C++ не являются стандартными, я оставляю только те части, которые мне нужны, и удаляю остальные (например, MSBuild, IDE и т. Д.). Я использую свой собственный пакетный скрипт для настройки PATH, INCLUDE а также LIB (работает просто отлично).

Если я запускаю этот пакетный скрипт и запускаю cmake ., MSVC будет выбран и построен с NMake.

В той же среде, cmake . -G "Ninja", GCC 6.3.0 выбран вместо MSVC.

Итак, мой вопрос, как сказать CMake, что я хочу использовать MSVC + Ninja, а не GCC + Ninja, когда оба находятся в PATH? Любую переменную среды, которую я должен установить?

2 ответа

Решение

Вы также можете использовать инвертированный подход и исключить все компиляторы, которые вам не нужны CMAKE_IGNORE_PATH, Требуется игнорировать список путей, но имейте в виду, что это должно быть точное совпадение строк. Преимущество состоит в том, что вы можете объявить их непосредственно из командной строки.

Так что я сделал, чтобы взять путь из найденного компилятора, но "не быть принятым" в CMAKE_IGNORE_PATH,

И на моей системе было три компилятора GCC в моем PATH (просто убедитесь, что вы начинаете с пустой директории двоичного вывода при каждой попытке):

> cmake -G"Ninja" ..
...
-- Check for working C compiler: C:/MinGW/bin/cc.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/LLVM/bin/clang.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin;C:/Program Files (x86)/LLVM/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
...

Использовать файл toolchain

set(CMAKE_C_COMPILER cl.exe)
set(CMAKE_CXX_COMPILER cl.exe)

затем создайте свой проект cmake с помощью -DCMAKE_TOOLCHAIN_FILE=toolchainfile

Другие вопросы по тегам