cl.exe /c — Предупреждение командной строки D9002

#windows #command-line #compilation #linker #cl

#Windows #командная строка #Сборник #компоновщик #cl

Вопрос:

Я пытаюсь использовать компилятор Microsoft ( cl ) из командной строки для создания несвязанных объектных файлов:

 cl /c /nologo /OUT:main.obj main.c
  

main.c является пустой main функцией:

 int main( void ) { return 0; }
  

Объектный файл создается, но cl выводит несколько D9002 предупреждений:

 cl : Command line warning D9002 : ignoring unknown option '/OU'
cl : Command line warning D9002 : ignoring unknown option '/OT'
cl : Command line warning D9002 : ignoring unknown option '/O:'
cl : Command line warning D9002 : ignoring unknown option '/Om'
cl : Command line warning D9002 : ignoring unknown option '/Oa'
cl : Command line warning D9002 : ignoring unknown option '/On'
cl : Command line warning D9002 : ignoring unknown option '/O.'
cl : Command line warning D9002 : ignoring unknown option '/Oo'
cl : Command line warning D9002 : ignoring unknown option '/Ob'
cl : Command line warning D9002 : ignoring unknown option '/Oj'
  

Как я понимаю, это параметры компоновщика, которые передаются автоматически cl , поскольку они также используются для компоновки.

Однако в моем случае, поскольку я не вызываю компоновщик (путем указания /C ), кажется, что cl эти неожиданные параметры по умолчанию сбивают с толку.

Есть ли способ переопределить эти параметры по умолчанию или подавить вывод этих предупреждений?

Комментарии:

1. cl синтаксический /OUT:main.obj анализ, /OU /OT /O: /Om ... который является недопустимым. Обратите внимание, что для /Oi не выдается предупреждение.

2. Вау… Как я это пропустил! Спасибо 🙏

Ответ №1:

/OUT не является опцией компилятора. Если вы хотите скомпилировать без привязки, используйте следующую командную строку:

 cl /c /nologo main.c
  

Имя объектного файла подразумевается именем исходного файла. Предыдущий вызов компилятора выводит main.obj.