Почему -o является кандидатом на удаление из компилятора и компоновщика Microsoft? - PullRequest
6 голосов
/ 06 апреля 2009

Я наткнулся на следующее, и мне интересно, какое влияние это окажет на мою среду cygwin / gnu, если я буду использовать что-то, кроме -o, для именования вывода из компиляции? Был ли принят какой-то новый стандарт и придерживаются ли его другие компиляторы?

Какая мотивация для удаления -o?

DOS PROMPT> введите compile.bat

cl.exe -D YY_MAIN = 1 lex.yy.c libfl.obj -o foobar

DOS PROMPT> compile

cl.exe -D YY_MAIN=1 lex.yy.c libfl.obj -o foobar
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
lex.yy.c
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:lex.yy.exe
/out:foobar.exe
lex.yy.obj
libfl.obj

cl: предупреждение командной строки D9035: опция 'o' устарела и будет удалена в следующем выпуске

Обновление: Как показано в ответе ниже, они пытаются преднамеренно усилить разрыв между Windows и UNIX? Надеюсь нет. Я надеюсь, что мне не хватает какой-то новой конвенции, принятой всеми компиляторами.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2009

Аргументы командной строки в Windows отличаются от аргументов командной строки в Unix. Обычно они начинаются с / вместо -, а аргументы cl.exe не обязательно совпадают с аргументами cc в Unix.

Похоже, что вы ищете вариант /Fe

3 голосов
/ 06 апреля 2009

Да. Вы должны использовать / F для установки параметров вывода компилятора.

2 голосов
/ 06 апреля 2009

Я не обязательно вижу за этим злую цель - скорее всего, это будет связано с совместимостью (возможно, -о мешает какой-то системе сборки или другой, используемой каким-либо крупным клиентом Microsoft или другим).

Однако раздражает , когда поставщик компилятора отбрасывает укоренившиеся практики и заученные рефлексы.

Но (синтаксические и философские) различия между компиляторами Microsoft и компиляторами Unix больше, чем простой ключ командной строки. Для этого вы можете попытаться отойти от простых сценариев пакетной сборки и перейти к Makefiles - или, что еще лучше, кроссплатформенной системе сборки, такой как CMake или SCons (пожалуйста, обратите внимание, что это всего лишь примеры, я не женат ни на одном из них :)).

...