Makefile之写demo时的通用Makefile写法总结

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8956523,作者:gqb666

    前面的一篇博文Makefile之大型工程项目子目录Makefile的一种通用写法介绍了大型项目子目录Makefile的一种通用写法,然而最近在写Linux网络方面的demo,一个目录下有几个文件,如果手工输命令显得太不专业了大笑。于是按该博文的方法改编了一下Makefile,也当学习之用。该Makefile适用于一个C文件生成一个可执行程序的场景(代码片段3适用于多个C文件生成一个可执行程序),使用该方法当工程目录内的文件有增删时无需对Makefile进行改动,可以说相当的智能。如果对patsubstwildcardsubst函数不了解的话可参阅上述博文。同时在测试过程中,又发现了一种更简洁的写法,如代码片段2,应该是使用了某些隐式规则,由于项目较忙,还未来得及深入研究,先记录下来,等空下来再研究,还望路过大侠多多指点。

1:如果在当前目录中直接make的话使用下列代码:

#General Purpose Makefile by guoqingbo
                           
objects := $(patsubst %.c,%.o,$(wildcard *.c))  
executables := $(patsubst %.c,%,$(wildcard *.c))  
                           
all :  $(objects)
$(objects) : %.o: %.c 
    gcc -c $< -o $@
    gcc $< -o $(subst .o, ,$@) 
clean :
     @rm -rf *.o *~
     @rm -rf ${executables}
 .PHONY : clean
2:后来发现下列代码也可以有相同效果,难道使用了什么隐式规则,还不是很明白,先记录下来:

#General Purpose Makefile by guoqingbo
CC = gcc                             
executables := $(patsubst %.c,%,$(wildcard *.c))
                             
all : $(executables)

clean :  
     @rm -rf *.o *~  
     @rm -rf ${executables}  
.PHONY : clean

3:多个C文件生成一个可执行程序的情况:
#General Purpose Makefile by guoqingbo
CC = gcc
#source_file := $(wildcard *.c)
objects := $(patsubst %.c,%.o,$(wildcard *.c))
#executables := $(patsubst %.c,%,$(wildcard *.c))

target := client
#%.o : %.c
#    gcc -c $< -o $@

all: $(target) 
$(target): $(objects)
    gcc $^ -o $@

clean:
    rm -f *.o 
    rm -rf $(target)
.PHONY: clean

4:嵌入式平台要定义交叉编译链CC或者必须加上从.c文件到.o的编译规则,不然会自动生成x86平台代码,报格式不一致的错误:

record.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [record] Error 1

#General Makefile by guoqingbo
                           
target := record
 
object := $(patsubst %.c,%.o,$(wildcard *.c))
    
CROSS_COMPILE ?= arm-none-linux-gnueabi-
CC := $(CROSS_COMPILE)gcc 
                           
CFLAGS += -I/home/gqb/crossdir/linux-devkit/arm-none-linux-gnueabi/usr/include
LDFLAGS += -L/home/gqb/crossdir/linux-devkit/arm-none-linux-gnueabi/usr/lib
LDFLAGS += -lasound -lpthread
 
%.o : %c
     $(CC) $< -o $@ $(CFLAGS) $(LDFLAGS)
 
all : $(target)
$(target): $(object)
     $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS)
 clean:
     rm -f $(target) $(object)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值