Ошибка, которую вы видите, является ошибкой разбора оболочки в опциях компиляции.Таким образом, команда не доходит до фактической компиляции, не говоря уже о связывании, и если на самом деле будут какие-то проблемы, возникающие из-за ваших опций связывания, вопрос не показывает нам, что они собой представляют.
Ошибка разбора, которую мы видим, вызвана параметром:
/Fa"x64\Debug\"
Документация /Fa
предусматривает, что при использовании формы:
/Fa directory\
,чтобы указать выходной каталог для списков сборок, должен присутствовать конечный \
, чтобы отличать эту форму опции от:
/Fa filename
Вы сделали это, и поместили каталогимя в кавычках - "x64\Debug\"
.
Когда оболочка Windows (cmd
), с которой вы выполняете вашу команду, анализирует командную строку, она обрабатывает \
в цитате "..."
как escape символ.
Таким образом, завершающий \
избегает закрытия "
из "x64\Debug\"
и параметра directory\
из /Fa
продолжается с помощью последующих параметров командыпока, наконец, сотрудничествоmpiler идентифицирует форму:
/Fa filename
и безуспешно пытается открыть список сборок с именем:
'x64\Debug" /E Hsc /nologo /Fox64\Debug".asm'
Эту ошибку синтаксического анализа можно избежать любым из следующих способов:
Избегайте обратной косой черты в указанных путевых именах
Измените:
/Fa"x64\Debug\"
на:
/Fa"x64\\Debug\\"
и аналогично для других путейв параметрах командной строки.
Удалите кавычки
Измените:
/Fa"x64\Debug\"
на:
/Fax64\Debug\
Цитатыобходные пути нужны только в том случае, если в путевых именах есть встроенные пробелы, так что оболочка будет анализировать одну строку вместо двух или более.У вас нет встроенных пробелов ни в одном из имен путей ни в одном из параметров командной строки, поэтому вы можете удалить кавычки из всех них.
Используйте /
вместо \
какразделитель пути
Измените:
/Fa"x64\Debug\"
на:
/Fa"x64/Debug/"
и аналогично для других путей в командной строке.Windows - единственная операционная система, которая использует \
в качестве разделителя пути.Другие используют /
, и Windows приняла оба в последних версиях.
Если это приводит к какой-либо визуальной путанице между /
, используемым в качестве разделителя пути ("x64/Debug/"
) и /
, используемым в качестве опции-prefix (/Fa
), cl
также позволит вам использовать опции в стиле Unix, например, -Fa
вместо /Fa
.
И, конечно, вы также можете удалить кавычки и используйте /
в качестве разделителя пути.
Если вы используете одно из этих решений только , чтобы исправить ошибку разбора в:
/Fa"x64\Debug\"
тогда та же самая ошибка синтаксического анализа будет вызвана следующей опцией:
/Fo"x64\Debug\"
Поэтому примените выбранное решение последовательно ко всей командной строке.