在makefile中同时让C代码和汇编代码都自动生成.o文件

  • Post author:
  • Post category:其他


最近遇到一个需求,目录下有多个c文件和S文件(汇编代码),需要把他们都自动编译成.o文件.经过摸索,最终解决方案如下:

SRCS1 := $(wildcard *.c)
SRCS2 := $(wildcard *.S)

OBJS1 := $(patsubst %.c,%.o,$(SRCS1)) 
OBJS2 := $(patsubst %.S,%.o,$(SRCS2))  

.PHONY : all
all : $(OBJS1) $(OBJS2)

$(OBJS1) : %.o : %.c
	$(GCC) -c $< $(CFLAG)
	
$(OBJS2) : %.o : %.S
	$(GCC) -c $< $(CFLAG)
	
.PHONY : clean
clean : 
	-rm *.o

核心思路就是

1.利用Makefile的分级目标机制,把汇编文件和c文件分别放到两个不同的子目标中.

比如 $(OBJS1) : %.o : %.c 的意思就是告诉编译器对$(OBJS1)这个列表中的所有.o文件,都有同名的.c文件产生.

类似的$(OBJS2) : %.o : %.S

的意思就是告诉编译器对$(OBJS2)这个列表中的所有.o文件,都有同名的.S文件产生.

这样就解决了.c和.S都产生.o文件的矛盾

2在all目标中依次调用这两个子目标即可.



版权声明:本文为laomai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。