如何回声| g ++在以下脚本中工作

时间:2011-07-05 23:54:53

标签: linux ubuntu-10.04

基于gcc: Do I need -D_REENTRANT with 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 个答案:

答案 0 :(得分:3)

-dM选项:

  

而不是正常输出,生成   所有的#define指令列表   在期间定义的宏   执行预处理器,   包括预定义的宏。这个   为您提供一种找出问题的方法   在您的版本中预定义   预处理器。

-E选项:

  

在预处理阶段后停止;做   不正确运行编译器。该   输出采用预处理的形式   源代码,发送给   标准输出。

-c选项导致编译器编译但不链接。这对-E选项来说是多余的。

单独的-告诉编译器从stdin读取它的输入。

因此,命令将空流回送到stdout,将空流管道传递给g++,然后读取空流但只运行预处理器,已经告知它忽略输入(空)并输出已定义的预处理器宏的完整列表。

答案 1 :(得分:1)

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时发现编译器设置的不同宏。