Включение С++ 14 в clang в Visual Studio
Я установил clang 3.7, и я использую его с визуальной студией. Когда я пытаюсь скомпилировать:
auto f()
{
return 2;
}
Я получаю сообщение о том, что это будущее от С++ 14. Я пробовал пройти:
-std = С++ 14 как аргументы компилятора, но затем я получаю ошибку:
Ошибка 1: неизвестный аргумент: '-std = С++ 14' C:\Users...\visual studio 2013\Projects\ConsoleApplication8\ConsoleApplication8\clang-cl.exe ConsoleApplication8.
Любые идеи о том, как включить функции С++ 14 в clang в Visual Studio 2013?
Edit:
Я должен добавить, что я могу скомпилировать и построить код С++ 11 с этим компилятором в Visual Studio без проблем.
Ответы
Ответ 1
clang-cl
не использует тот же синтаксис параметров, что и традиционный clang - он должен имитировать командную строку Visual Studio cl
, а не clang
.
Например, из clang-cl
документация:
CL.EXE COMPATIBILITY OPTIONS:
/? Display available options
/arch:<value> Set architecture for code generation
/C Don't discard comments when preprocessing
/c Compile only
/D <macro[=value]> Define macro
...
Однако у них есть небольшой сквозной вариант для поддержки таких случаев, как ваш:
OPTIONS:
...
-Xclang <arg> Pass <arg> to the clang compiler
-mllvm <value> Additional arguments to forward to LLVM option processing
И так казалось бы, что вы бы выбрали clang-cl -Xclang -std=c++14
. Лучше всего.
Ответ 2
Я работаю над clang-cl. Как говорит антидух, clang-cl пытается имитировать Visual Studio cl
. cl
до и включая С++ 14 не было переключателя для включения языковых режимов, он всегда включал все последние вещи. Следовательно, clang-cl тоже. MSVC получил поддержку С++ 14 в MSVC 2015, поэтому, если вы скажете clang-cl, что вы хотите, чтобы он эмулировал MSVC 2015 или более поздней версии, он автоматически включит С++ 14. clang-cl по умолчанию эмулирует версию MSVC, найденную в вашей системе. Вы можете явно передать -fmsc-version=1900
, чтобы заставить эмуляцию 2015, которая затем неявно включает С++ 14.
Начиная с MSVC 2017, cl.exe поддерживает /std:
флаг, поэтому clang-cl также поддерживает это. Его можно использовать для включения С++ 14 (самого низкого уровня), С++ 17, С++ 20 или самой новой версии.
Флаги -Xclang
являются внутренними флагами и не считаются стабильным интерфейсом. Поэтому не используйте их.