如何扩展Makefile使GCC同时生成.s汇编文件与可执行二进制
可实现对应需求,直接在原有Makefile基础上扩展即可
首先修正原有配置的一处常见笔误:你当前配置里的CLFAGS为拼写错误,正确的编译参数变量名为CFLAGS,不修正的话设置的-Wall警告、-g调试参数不会正常传递给GCC。
扩展后的完整Makefile配置
CC=gcc # 原有编译参数,修正拼写错误 CFLAGS=-Wall -g # 汇编生成专属参数:输出.s格式、指定intel语法 ASM_FLAGS=-S -masm=intel # 全量构建目标,同时依赖可执行文件和汇编文件 all: file.out file.s # 从C源文件生成对应汇编的构建规则 file.s: file.c $(CC) $(ASM_FLAGS) $< -o $@ clean: # 清理时同时删除两类生成产物 rm -f file.out file.s
配套说明
- 执行
make指令时,无需额外操作就会同步生成两个文件:- 带调试信息、开启全量编译警告的
file.out可执行二进制 - 与你手动执行
gcc -S -masm=intel file.c效果完全一致的intel格式file.s汇编文件,可直接用于研读编译器生成的汇编逻辑
- 带调试信息、开启全量编译警告的
- 如果习惯原有可执行文件的命名(不带.out后缀),只需要把配置里所有的
file.out替换为file即可,逻辑完全不变 - 执行
make clean时,会同时清除可执行文件和汇编文件,不会残留冗余构建产物
新手高频踩坑提醒:Makefile中规则下方的命令行(比如调用gcc生成汇编的那行)开头必须用Tab字符缩进,不能用普通空格,否则make会抛出语法错误。
内容的提问来源于stack exchange,提问作者xbufu
相关产品推荐
相关产品推荐

