【makefile】Makefile 实际用例分析------- 比较通用的一种架构

本文通过一个实际的工程案例,详细分析了如何编写适用于Linux环境的Makefile,包括文件分布、编译过程及特殊字符的使用。讲解了在Makefile中如何处理.o文件的生成,以及在源文件或头文件变动时的编译策略,并提供了一个工程的下载链接以供参考。
摘要由CSDN通过智能技术生成

目录

第一部分:

第二部分:

makefile中的一些特殊字符:


第一部分:

这里不再说Makefile的基本知识,如果需要学习,那么请参考: 下载:makefile 中文手册或者点击打开链接或者跟我一起写Makefile( 陈皓 )

这里说的是一般的实际的一个工程应该怎么去写。

环境:ubuntu 10.04

先看看我的文件的分布情况:

顶层:

然后src中:是所有的源程序以及头文件( 我这里是使用自己的IR树的代码作为实验 )

而build文件夹是为了编译使用的!下面有:

obj文件夹里面放的是编译过程中的.o和.d文件,还有一个subdir.mk的子文件,用于指示怎么生成.o

obj中:

下面我们从顶层开始慢慢分析:

*******温馨提示:下面的注释是为了方便处理,写在每一条语句后面,其实这样的风格是不好的,所以,如果

       你使用了这个makefile,请将注释换行...或者去掉,否则可能编译异常!谢谢记住!

*******

最外层的makefile:

SHELL = /bin/sh             # 这个地方是指示使用的shell是sh  
EXEC = ir_tree              # 最终生成的binary的名称  
BUILD_DIR = build           # 这个子文件夹,此处也就是我们build文件夹  
  
all:                        # all在此处是终极目标,这个你应该知道的。一般我们make的时候,第一个目标作为终极目标  
    @( cd ${BUILD_DIR}; make )  # 这句是进去build文件夹去执行那个makefile  
                                
clean:                      # clean就不说了  
    @echo 'start clean...'  
    @($(RM) $(EXEC))  
    @(cd ${BUILD_DIR}; make clean)  
    @echo 'Finished!'  
    @echo ''

现在进入build文件夹,看这个文件夹下面的makefile

SHELL = /bin/sh            # 同上  
  
INCLUDE_DIR :=             # include文件夹,一般我们在引用库的时候,需要将其头文件放在一个include中,然后自己的程序                           # 编译的时候需要包含这个include,例如-I$(<span style="font-family: SimHei;">INCLUDE_DIR</span><span style="font-family: SimHei;">)</span>  
LIB_DIR := -lm             # 引入的库  
EXEC = ../ir_tree          # 这是一个最终binary名称,这里是将这个可执行放在了上层文件夹中  
  
-include obj/subdir.mk     # 这个地方是include了一个子文件  
                           # 这里子文件作用是,为了生成所有的.o文件(当然附带生成.d文件!),生成.o之后,才能回到这一       # 层的makefile进行链接成最终的可执行的操作!具体操作我们稍后再看  
  
all:${EXEC}                # 好!这里是这个makefile的第一个目标。即终极目标,所有需要找
  
${EXEC}: ${OBJS}           # ${EXEC}的生成规则,注意这里我们没有看到$(OBJS),那是因为在obj/subdir.mk中!  
    @echo ' Building target: $@ '  
    gcc -o $@ $(OBJS) $(LIB_DIR)   # 这一句就是为了将所有的.o文件 + 引用的库 链接起来,生成最后的$@,也就是$(EXEC),也就是最后的binary!  
    @echo 'Finished building target: $@'  
    @echo ''  
  
clean:  
    @
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值