如何配置Automake生成含汇编目标(%.s)的Makefile?
实现Automake生成汇编文件(.s)目标的方法
当然可以!Automake完全能满足你这个需求——不用通过.o文件反汇编,直接让编译器输出汇编文本文件,而且配置起来非常简单。核心思路就是给Automake添加一个从.c文件直接生成.s文件的通用规则,让make main.s这类命令直接调用带-S参数的编译器。
具体配置步骤
- 添加.s文件生成规则
在你的Makefile.am中,添加以下通用模式规则:
# 定义从.c文件生成.s汇编文件的规则 %.s: %.c $(CC) $(CFLAGS) $(CPPFLAGS) -S -o $@ $<
$(CC):Automake默认使用的C编译器变量,会继承你configure时指定的编译器$(CFLAGS)/$(CPPFLAGS):继承项目中已配置的编译选项(比如警告级别、宏定义等)-S:编译器的核心参数,告诉它只生成汇编文件,不进行汇编和链接$@:自动替换为目标文件名(比如main.s)$<:自动替换为依赖的源文件名(比如main.c)
- 配置清理规则(可选但推荐)
如果你希望make clean命令能自动删除生成的.s文件,在Makefile.am中添加:
# 让make clean时清理所有.s文件 CLEANFILES = *.s
- 完整示例
假设你的项目只有一个main.c,最终要编译成名为myprog的二进制,Makefile.am可以写成这样:
bin_PROGRAMS = myprog myprog_SOURCES = main.c # 生成汇编文件的规则 %.s: %.c $(CC) $(CFLAGS) $(CPPFLAGS) -S -o $@ $< # 清理.s文件 CLEANFILES = *.s
使用方法
配置完成后,按常规流程构建项目:
- 执行
autoreconf -i(首次配置或修改Makefile.am后) - 执行
./configure - 现在你可以:
- 执行
make myprog:正常编译生成二进制文件 - 执行
make main.s:直接从main.c生成汇编文本文件,完全不需要处理.o文件
- 执行
扩展:C++项目的适配
如果是C项目,只需要把规则改成针对.cpp文件,并用C编译器变量:
%.s: %.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -S -o $@ $<
内容的提问来源于stack exchange,提问作者Scott Norton
相关产品推荐
相关产品推荐

