复杂就是简单的多态叠加--处理多级子目录的Makefile

本文介绍如何利用Makefile和shell命令管理包含多级子目录的项目编译。通过find命令查找头文件和源代码,动态构建编译指令,避免手动编写每个子目录的Makefile,提高开发效率。
摘要由CSDN通过智能技术生成

 

开发中常常有这样的需求:一个不算简单的目录结构,需要一个统一的Makefile来进行编译管理。这时候最简单的做法就是遍历--搜罗所有的头文件和代码文件,使用统一的规则gcc -Ixx -o *.o *.c<pp>然后打扫战场,处理尸体;最标准的做法就是在每个子目录下编程时随手加上Makefile, 然后再百川归海,有统一的父目录(确切的说是始祖)Makefile来遥控, 但是,,,,你不觉得烦吗?

  其实Makefile提供了很多方法(函数)来方便懒人的,下面有个小例子:   

LIBS= -L/usr/lib /

-L../MicroSip6.0 /

-L./lib /

-lssl /

-lcrypto /

 

 

ARCH=

MW_DIR=$(PWD)

CC = $(ARCH)gcc

LD = $(ARCH)ld

AS = $(ARCH)as

CPP = $(ARCH)g++

AR = $(ARCH)ar

 

MW_DIR=.

INCLUDE = -I.

以上这一段没什么可说的, 相信广大软件行业的民工兄弟都再熟悉不够--备草料。
然后,我希望找到所有编译目录下的头文件--

SAMDIR=$(MW_DIR)

SAMINCH=$(shell find $(SAMDIR) -name "*.h*")

:::找到了,大家可以看到Makefile是可以使用shell命令的,现在结果存储在SAMINCH。

TMPDIR=$(dir $(SAMINCH))

dir是个函数,就是列出SAMINCH目录前缀(/*.h之前的字串)的结果。

SAMINCDIR=$(sort $(TMPDIR))

sort也是个函数,这是为了去除重复的目录名。

INCLUDE += $(foreach temp, $(SAMI

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值