问题有点儿XY。
您希望能够制作中间程序集文件foo.s,其中
源文件foo.c 是自动工具项目中的源之一,使用
由项目的./configure 脚本生成的makefile。你
假设要做到这一点,您必须对 automake 输入做一些事情 -
Makefile.ams? - 这将导致./configure 生成 Makefiles
包括与所有对象目标 *.o 匹配的程序集目标 *.s。
你可以,但是你的项目不会是常规的自动工具
项目通常分布,无需使其不规则
得到你想要的。
GCC 选项-save-temps
存在让开发者看到编译的中间文件——预处理器
输出,程序集。
$ gcc -c -o foo.o foo.c
输出foo.o
$ gcc -save-temps -c -o foo.o foo.c
输出:
foo.o
foo.i # preprocessed source
foo.s # assembly
我希望你知道,GNU Make 从 make-variable 接收编译器选项
CFLAGS,并且 automake 尊重这个约定,独立于任何编译器,并且除了任何编译器之外
项目的自动工具规定的选项。所以,如果你否则会生成
生成文件:
$ ./configure ...
然后,要将-save-temps 添加到 C 编译器选项中,请改为生成 makefile
与:
$ ./configure CFLAGS=-save-temps ...
如果你已经在使用CFLAGS,例如
$ ./configure CFLAGS="-g -O0" ...
然后追加-save-temps:
$ ./configure CFLAGS="-g -O0 -save-temps" ...
那么,
$ make main.o
将使main.o、main.i 和main.s 保持最新状态。
要禁用-save-temps,当然,重新运行./configure,将其从
CFLAGS。
如果项目涉及C++编译,那么CXXFLAGS会影响C++
编译器的方式与 CFLAGS 影响 C 编译器的方式相同。注意
生成的预处理 C++ 源代码将称为 *.ii,而不是 *.i。
启用-save-temps 后,make clean 将不会删除*.i 和*.s
文件。你可能不在乎,因为编译总是会破坏它们。如果你
请注意,您可以利用 automake 的标准假目标clean-local,
支持让自动工具维护者扩展
clean。将以下配方添加到每个源目录的Makefile.am
在项目中:
clean-local:
$(RM) *.i *.ii *.s
然后更新自动工具并重新生成 Makefile:
$ autoreconf
$ ./configure ...