Как эхо |g ++ работает по следующему сценарию - PullRequest
2 голосов
/ 06 июля 2011

На основе gcc: нужен ли -D_REENTRANT с pthreads?

> echo | g++          -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1

Автор использует приведенную выше команду для экспорта параметров, используемых компилятором.Я хочу знать, почему такая команда работает подробно:

> echo | g++ -E -dM -c - > singlethreaded

Я понимаю следующие части:

> singlethread # means to redirect the results to the file singlethread

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Опция -dM:

Вместо нормального вывода генерируем список директив #define для всех макросы, определенные во время исполнение препроцессора, включая предопределенные макросы. это дает вам возможность узнать, что является предопределено в вашей версии препроцессор.

Опция -E:

Останов после стадии предварительной обработки; делать не правильно запустить компилятор. вывод в виде предварительно обработанных исходный код, который отправляется на стандартный вывод.

Опция -c вызывает компиляцию компилятора, но не ссылку. Это излишне с опцией -E.

Одиночный - указывает компилятору читать его входные данные из стандартного ввода.

Таким образом, команда выводит пустой поток на stdout, передает этот пустой поток на g++, который затем читает пустой поток, но запускает только препроцессор, которому было сказано игнорировать ввод (пустой) и вывод полный список определенных макросов препроцессора.

1 голос
/ 06 июля 2011

echo | g++ - говорит g++ скомпилировать stdin и переходит в пустую программу (пустая строка из echo). Опция -E вызывает только препроцессор (это похоже на прямой запуск cpp, но с любыми макросами, автоматически определяемыми g++ присутствует). Опция -dM - это флаг отладки, который выводит состояние внутри компилятора на определенном этапе:

       -dM
       -fdump-rtl-mach
           Dump after performing the machine dependent reorganization
           pass, to file.155r.mach.

Цель всего этого состоит в том, чтобы выяснить, какие макросы компилятор устанавливает по-разному при изменении параметра командной строки -pthread, сравнивая этот вывод дампа.

...