gcc/make-创建用于创建程序集和链接的make文件

gcc/make-创建用于创建程序集和链接的make文件,gcc,assembly,makefile,Gcc,Assembly,Makefile,为了执行一个实验,我想修改OpenWRT项目的汇编代码(通过在常规、有意义的代码之间插入NOP)。 我需要通过在第一次运行中使用gcc的-s标志编译来创建程序集文件(.s文件),执行一个shell脚本修改程序集文件,并在第三步调用链接器来创建可执行二进制文件。除了步骤2之外,是否有方法通过适当的make文件修改/配置来完成步骤1和3,即创建一个make文件以进行编译(创建.s文件)和另一个进行链接 谢谢你的启发& 新年快乐!:) 使用以下语法: target [target...] : [dep

为了执行一个实验,我想修改OpenWRT项目的汇编代码(通过在常规、有意义的代码之间插入NOP)。 我需要通过在第一次运行中使用gcc的-s标志编译来创建程序集文件(.s文件),执行一个shell脚本修改程序集文件,并在第三步调用链接器来创建可执行二进制文件。除了步骤2之外,是否有方法通过适当的make文件修改/配置来完成步骤1和3,即创建一个make文件以进行编译(创建.s文件)和另一个进行链接

谢谢你的启发& 新年快乐!:)

使用以下语法:

target [target...] : [dependent ....]
     [ command ...]
例如:

 %.S: %.c
      $(CC) -S $@ -c $<
 %.o: %.S
      $(CC) -o $@ -c $<
%.S:%.c
$(CC)-S$@-c$<
%.o:%.S
$(CC)-o$@-c$<
这意味着要构建目标foo.o,make应该构建foo.S,而对于foo.S,则应该构建foo.c $@表示目标名称
$<表示目标为第一个依赖项

我建议编译器输出asm使用
.s
。仅对手写asm源使用
.S
。(除非OP的脚本驱动修改添加了任何需要C预处理器的内容)。实际上,我建议生成自定义扩展,如.s_orig,然后添加另一个规则%.s:%.s_orig,它将运行添加NOP的脚本(如果可以使用脚本完成),以及%.o:%.s的最终规则,如答案所示。这样,makefile将覆盖所有步骤。:)非常感谢你的回答!但是,参数'-@'是什么意思(你是说'$@',我在整个手册页上找不到'-@')。很抱歉,这是一个打字错误