Является ли Visual C ++ таким же мощным, как gcc? - PullRequest
9 голосов
/ 24 июня 2010

Мое определение мощных - это способность к настройке.

Я знаком с gcc Я хотел попробовать MSVC.Итак, я искал эквивалентные опции gcc в msvc.Я не могу найти многие из них.

управляющий тип вывода

Stop after the preprocessing stage; do not run the compiler proper.
gcc: -E
msvc: ???

Stop after the stage of compilation proper; do not assemble.
gcc: -S
msvc: ???

Compile or assemble the source files, but do not link.
gcc: -c
msvc:/c

Полезно для отладки

Print (on standard error output) the commands executed to run the stages of compilation.
gcc: -v
msvc: ???

Store the usual “temporary” intermediate files permanently;
gcc: -save-temps
msvc: ???
  1. Существует ли какое-то руководство по отображению опций компилятора gcc <-> msvc?
  2. Сводка опций gcc перечисляет больше опций в каждом разделе, чем В списке опций компиляторапо категории .В msvc пропало множество важных и интересных вещей.Я что-то упустил или msvc действительно менее мощный, чем gcc.

Ответы [ 3 ]

26 голосов
/ 24 июня 2010

MSVC - это IDE, gcc - просто компилятор. CL (компилятор MSVC) может выполнять большинство шагов, которые вы описываете с точки зрения gcc. CL /? дает помощь.

Е.Г.

Предварительная обработка в стандартный вывод:

CL /E

Компиляция без ссылки:

CL /c

Создать сборку (однако, в отличие от gcc, это не мешает компиляции):

CL /Fa

CL на самом деле просто компилятор, если вы хотите посмотреть, какие команды генерирует IDE для компиляции и компоновки, проще всего взглянуть на раздел командной строки на страницах свойств для элемента в IDE. CL не вызывает отдельного препроцессора или ассемблера, поэтому нет отдельных команд для просмотра.

Для -save-temps IDE выполняет отдельную компиляцию и связывание, поэтому объектные файлы в любом случае сохраняются. Для сохранения выходных данных препроцессора и выходных данных ассемблера вы можете включить /P и /Fa через IDE.

gcc и CL различны, но я бы не сказал, что MSVC не хватает «адского множества» вещей, конечно, не тех выходов, которые вы ищете.

10 голосов
/ 24 июня 2010

Для эквивалента -E, cl.exe имеет / P (он не «останавливается после этапа предварительной обработки», но выводит вывод препроцессора в файл, что в значительной степени одно и то же) .

Для -S это немного мрачнее, поскольку шаги «компиляции» и «сборки» происходят в разных местах в зависимости от того, какие другие опции вы указали (например, если у вас есть целая оптимизация программы включается, то машинный код не генерируется до стадии соединения).

Для -v Visual C ++ отличается от GCC. Он выполняет все этапы компиляции непосредственно в cl.exe (и link.exe), поэтому нет «выполненных команд» для отображения. Аналогично для -save-temps: поскольку все происходит непосредственно внутри cl.exe и link.exe, единственными «временными» файлами являются файлы .obj, которые создает cl.exe, и они всегда сохраняются.

В конце концов, GCC - это проект с открытым исходным кодом. Это означает, что любой, у кого есть царапина, может добавлять любые параметры командной строки, которые ему нравятся, с относительно небольшим сопротивлением. Для Visual C ++, коммерческого продукта с закрытым исходным кодом, каждый вариант должен иметь экономическое обоснование, встречи по проектированию, планы тестирования и так далее. Каждая новая функция начинается с минус 100 баллов .

3 голосов
/ 24 июня 2010

Оба компилятора имеют множество опций для изменения ... всего.Я подозреваю, что любой вариант, отсутствующий в любом из них, является вариантом для чего-то, что не стоит делать в первую очередь.Большинство «обычных» пользователей в любом случае не находят применения большинству из этих опций.

Если вы просто рассматриваете количество доступных опций в качестве меры «мощности» или «гибкости», тогда вы 'Вероятно, победителем станет gcc, просто потому, что gcc работает со многими платформами, отличными от Windows, и имеет специальные опции для многих из тех платформ, которые вы, очевидно, не найдете в MSVC.gcc (ну, gcc toolchain) также компилирует множество языков помимо C и C ++;Я недавно использовал его для Objective-C, например.

РЕДАКТИРОВАТЬ: Я с Дином в вопросе обоснованности вашего вопроса.Да, у MSVC (cl) есть варианты, эквивалентные многим параметрам gcc, но нет, количество опций на самом деле мало что значит.

Короче говоря: если вы не делаете что-то особенное,MSVC легко найдется достаточно «мощным» на платформе Windows, так что вы, скорее всего, не пропустите ни одной опции gcc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...