2011-11-05 63 views
19

如何编译为汇编代替使用gcc的可执行文件。我知道有一个-S标志,但我在哪里可以在makefile中使用它。例如,如果我使用标志-O3 -o exe_name,我应该在哪里放置-S标志?我如何编译为使用gcc进行汇编

+2

你是指目标文件而不是程序集? – Hogan

回答

17

我建议也使用-fverbose-asm,因为那时生成的汇编程序有一些生成的注释来“解释”代码。

为了理解GCC优化的效果,人们甚至可以尝试-fdump-tree-all(但这会产生数百个文件!)。

21

您可以要求GCC生成程序集文件,而不是目标文件(或可执行文件)。

例如:

gcc -Wall -c test.c 

会产生从test.c的(test.o)的目标文件。

gcc -Wall -o test test.c 

将从test.c的

gcc -Wall -S test.c 

将从test.c的生成汇编文件生成名为 '测试' 的可执行文件(test.s)

+4

恭敬地不同意:你*编译*到程序集,然后*汇编*到一个目标文件。例如,我系统上'-S'的文档说“编译阶段合适后停止;不要组装。“ –

+2

你为什么说你不会”编译“到程序集?这正是它所做的!编译!机器代码又名程序集!编译完成后,只需要写入0-1或者字母即可。 – Shahbaz

+2

在我看来,编译意味着将源代码转换为机器代码。汇编是源代码,即使非常接近机器代码。 – Macmade

12

把它几乎任何地方。

gcc -O3 -S -o output.asm ... 

将产生assemby存储在output.asm

+2

默认情况下'-S'写入类似'filename.s'的东西,所以我不认为'-o'参数是必要的 –

+1

正确,它只是你需要选择输出文件的名称。 – Mat

+0

最后一个简单的答案......感谢兄弟! – dbkoren