Не удается установить набор инструментов для нового v140_clang_3_7 в Visual Studio 2015 с обновлением 1 CMake

Поэтому я только что скачал новое Visual Studio Update 1. и я пытаюсь заставить CMake создать правильный набор инструментов для платформы.

В обновлении 1 появился новый набор инструментов: Clang 3.7 с Microsoft CodeGen введите здесь описание изображения

Довольно захватывающе, да!

Во всяком случае, я пытаюсь заставить CMake сгенерировать здесь правильный набор инструментов.

ПРЕДПОЛОЖЕНИЕ 1. Имя набора инструментов, которое может принять CMake, — v140_clang

C:\Users\russe\Documents\TestCMAKECLANG>ls
CMakeLists.txt  main.cpp

C:\Users\russe\Documents\TestCMAKECLANG>cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)


add_executable(TestEXE main.cpp)
C:\Users\russe\Documents\TestCMAKECLANG>cat main.cpp


// use some fancy c++14 feature that VS doesn't have

template<typename T>
constexpr T doThing{};

int main(){}
C:\Users\russe\Documents\TestCMAKECLANG>
7. Я предполагаю это, потому что это то, что указано в скобках, и это то, что используется в других наборах инструментов, таких как v120 и т. д.

Итак, я настроил простой тестовый пример:

C:\Users\russe\Documents\TestCMAKECLANG>ls
CMakeLists.txt  main.cpp

C:\Users\russe\Documents\TestCMAKECLANG>cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)


add_executable(TestEXE main.cpp)
C:\Users\russe\Documents\TestCMAKECLANG>cat main.cpp


// use some fancy c++14 feature that VS doesn't have

template<typename T>
constexpr T doThing{};

int main(){}
C:\Users\russe\Documents\TestCMAKECLANG>

Затем я запускаю CMake с правильными аргументами:

ПРЕДПОЛОЖЕНИЕ 2: у меня есть правильные аргументы

C:\Users\russe\Documents\TestCMAKECLANG>cmake -G "Visual Studio 14 2015" -T "v140_clang_3_7"
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error in :
  No CMAKE_C_COMPILER could be found.



CMake Error in :
  No CMAKE_CXX_COMPILER could be found.



-- Configuring incomplete, errors occurred!
See also "C:/Users/russe/Documents/TestCMAKECLANG/CMakeFiles/CMakeOutput.log".
See also "C:/Users/russe/Documents/TestCMAKECLANG/CMakeFiles/CMakeError.log".

C:\Users\russe\Documents\TestCMAKECLANG>

Чего-чего! CMAKE_C_COMPILER или CMAKE_CXX_COMPILER не найдено.

Так что это не работает. Посмотрим, может быть просто -T не работает должным образом. Давайте проверим с v120

C:\Users\russe\Documents\TestCMAKECLANG>cmake -G "Visual Studio 14 2015" -T "v120"
-- The C compiler identification is MSVC 18.0.31010.0
-- The CXX compiler identification is MSVC 18.0.31010.0
-- Check for working C compiler using: Visual Studio 14 2015
-- Check for working C compiler using: Visual Studio 14 2015 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 14 2015
-- Check for working CXX compiler using: Visual Studio 14 2015 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/russe/Documents/TestCMAKECLANG

C:\Users\russe\Documents\TestCMAKECLANG>

введите здесь описание изображения

Работает как новорожденный. Хм.

Ладно, ребята, что дальше?


person Russell Greene    schedule 01.12.2015    source источник
comment
Вы уверены, что CMake уже поддерживает новую цепочку инструментов? У вас последняя версия CMake? Вы пробовали с одним из Git?   -  person usr1234567    schedule 01.12.2015
comment
@ usr1234567 usr1234567 Я должен быть таким наивным, думая, что CMake - это волшебный черный ящик, просто генерирующий магию. Мне придется попробовать более новый CMake, но, возможно, через несколько недель; это только вчера вышло.   -  person Russell Greene    schedule 01.12.2015
comment
Почему не сейчас? Обычно версия CMake сохраняется для обновления. И если у вас есть проблема, вы можете просто установить старую версию еще раз. На самом деле ваша старая версия может использовать новую цепочку инструментов. Я не проверял ни коммиты Git, ни сам исходный код.   -  person usr1234567    schedule 01.12.2015
comment
Казалось бы, CMake должен будет сгенерировать немного другой MSBuild, он же vcxproj, файл для PlatformToolset v140_Clang_3_7. Например, для обычной компиляции C1 он добавляет ‹ObjectFileName›$(IntDir)‹/ObjectFileName›. Предположительно, C1 понимает, что это каталог, и добавляет имя файла объекта, а clang этого не делает, поэтому вам действительно нужно ‹ObjectFileName›$(IntDir)%(filename).obj‹/ObjectFileName›. Еще лучше было бы, если бы CMake не добавлял элемент ‹ObjectFileName›, поскольку MSBuild все равно делает все правильно.   -  person goneskiing    schedule 01.12.2015
comment
В дополнение к моему предыдущему комментарию. У CMake есть дурная привычка явно задавать параметры, тогда как MSBuild будет делать правильно и, возможно, лучше по умолчанию. Также обратите внимание, что это не решит вашу проблему, я подозреваю, что Cmake имеет жестко запрограммированный список наборов инструментов, и его необходимо расширить. Просто, даже если это другие вещи, также необходимо исправить   -  person goneskiing    schedule 01.12.2015
comment
Разве вам не нужно иметь clang и clang++ в PATH?   -  person arrowd    schedule 01.12.2015
comment
Похоже, это нужно сделать где-то здесь: github.com/Kitware/ CMake/blob/мастер/Источник/   -  person Jean-Michaël Celerier    schedule 05.12.2015
comment
Я некоторое время копался там, но безуспешно. хз что дальше   -  person Russell Greene    schedule 05.12.2015


Ответы (1)


Я посмотрел на это, и это выглядит не так уж плохо. Я выдвинул первый прототип, способный скомпилировать очень простую программу.

Я продолжу работу над исправлением ошибок, но, надеюсь, это может стать началом для того, чтобы понять остальную часть необходимой работы.

Есть два способа вызвать Clang.

Первый — указать набор инструментов из командной строки.

cmake -G "Visual Studio 14 2015" -T v140_clang_3_7 ... 

Второй — установить целевое свойство проекта, чтобы он специально использовал цепочку инструментов Clang.

set_property(TARGET ${project} PROPERTY VS_PLATFORM_TOOLSET_OVERRIDE "v140_clang_3_7") 
person Gilles Khouzam    schedule 26.01.2016
comment
Потрясающий. Есть идеи, когда это будет продвинуто вверх по течению? - person goneskiing; 04.02.2016