You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Automake生成含汇编目标(%.s)的Makefile?

实现Automake生成汇编文件(.s)目标的方法

当然可以!Automake完全能满足你这个需求——不用通过.o文件反汇编,直接让编译器输出汇编文本文件,而且配置起来非常简单。核心思路就是给Automake添加一个从.c文件直接生成.s文件的通用规则,让make main.s这类命令直接调用带-S参数的编译器。

具体配置步骤

  1. 添加.s文件生成规则
    在你的Makefile.am中,添加以下通用模式规则:
# 定义从.c文件生成.s汇编文件的规则
%.s: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -S -o $@ $<
  • $(CC):Automake默认使用的C编译器变量,会继承你configure时指定的编译器
  • $(CFLAGS)/$(CPPFLAGS):继承项目中已配置的编译选项(比如警告级别、宏定义等)
  • -S:编译器的核心参数,告诉它只生成汇编文件,不进行汇编和链接
  • $@:自动替换为目标文件名(比如main.s)
  • $<:自动替换为依赖的源文件名(比如main.c)
  1. 配置清理规则(可选但推荐)
    如果你希望make clean命令能自动删除生成的.s文件,在Makefile.am中添加:
# 让make clean时清理所有.s文件
CLEANFILES = *.s
  1. 完整示例
    假设你的项目只有一个main.c,最终要编译成名为myprog的二进制,Makefile.am可以写成这样:
bin_PROGRAMS = myprog
myprog_SOURCES = main.c

# 生成汇编文件的规则
%.s: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -S -o $@ $<

# 清理.s文件
CLEANFILES = *.s

使用方法

配置完成后,按常规流程构建项目:

  1. 执行autoreconf -i(首次配置或修改Makefile.am后)
  2. 执行./configure
  3. 现在你可以:
    • 执行make myprog:正常编译生成二进制文件
    • 执行make main.s:直接从main.c生成汇编文本文件,完全不需要处理.o文件

扩展:C++项目的适配

如果是C项目,只需要把规则改成针对.cpp文件,并用C编译器变量:

%.s: %.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -S -o $@ $<

内容的提问来源于stack exchange,提问作者Scott Norton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:24