makefile第三版发布

首先为上次发布的第2版makefile存在严重bug表示歉意。

这次发布的makefile,真正实现了下面的功能:

1,自动获取代码的路径结构,不用在每次添加新的文件夹后更新makefile

2,对.cpp文件和.o文件建立了关联,如果只有个别.cpp文件做了修改,再次执行make的时候,能够只编译新修改的文件,并重新连接。

3,makefile文件只有一个,不用在每个文件夹下面都放一个子makefile文件,减少了项目的维护工作。

下面说一下这次makefile改变的部分:

首先是最终目标的修改,改成了下面的形式:
#all target
all: dir $(FinalOutput)$(PRJ_NAME)

以前的样子是:
all: dir $(PRJ_NAME)

这是因为在make的时候,make会在当前目录下面查找最终目标,因此,我们需要的最终目标$(PRJ_NAME),在当前目录下面,就变成了$(FinalOutput)$(PRJ_NAME)。

接下来是dir里面的修改,其实可以说是优化:
dir:
 mkdir -p $(FinalOutput);
 for val in $(SUBDIRS);do /
   mkdir -p $(FinalOutput)$${val}; /
 done;

 
最终要的改变在这里,也是整个makefile最核心的地方了,模式规则。
$(FinalOutput)%o:./%cpp
 @echo 'Building file: $<'
 @echo 'Invoking:GCC C++ Compiler'
 g++ $(CFLAGS) $(INCLUDEPATH) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
 @echo 'Finished building: $<'
 @echo ' '

在上面的规则里面,我来说下$(FinalOutput)%o:./%cpp的意思。我还是举例说吧,直接讲不容易搞明白。
比如我有一个目标是bin/Debug/src/data/core.o,其中变量$(FinalOutput)的值是bin/Debug/
应用规则后对应的依赖文件就是./src/data/core.cpp了。

还不明白?那我说得再详细一些。
比如我们建立了一个项目,在文件夹testMake下面,它下面有文件夹src,这里面是代码,还有文件夹bin,作为make的输出目录,另外就是还有这个makefile文件。
在目录testMake下面执行make,会先在bin目录下面建立文件夹Debug(如果你配置为release,那么建立的就是Release)。然后会在bin/Debug下面创建最终目标,比如是testMake吧。而testMake需要当前目录下面的文件bin/Debug/src/data/core.o,这个.o文件又依赖于当前目录下的文件./src/data/core.cpp。于是make就会去编译相应的cpp文件,把生成的.o文件放到bin/Debug下面对应的位置,然后再link,就生成了最终目标。

下面是makefile的下载地址:
http://download.csdn.net/source/454987

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值