Makefile多个子文件夹

首先,目录结构:

其中根目录Makefile主要作用是调用其他子文件夹Makefile,每个子模块执行各自编译后在build文件夹下生成obj文件,最后再执行build文件夹下Makefile进行链接。

根目录Makefile:


TARGET = ACT_Drv
##

SRC_DIR=src
BUILD_DIR=build
LIB_DIR=lib
INTERFACE_DIR 	= $(SRC_DIR)/Interface
ACT_DRIVER_DIR 	= $(SRC_DIR)/Act_Driver
CURRENT_DIR 	=$(SRC_DIR)/Current_Loop

##
CC=gcc


all:
	make -C $(ACT_DRIVER_DIR)
	make -C $(CURRENT_DIR)
	make -C $(INTERFACE_DIR)
	make -C $(BUILD_DIR)

任意子文件夹Makefile:

OUTPUTDIR = ../../build
TARGET = $(OUTPUTDIR)/Current_Loop.o
CC := gcc


SRC = $(wildcard *.c)
OBJ = $(patsubst %.c,$(OUTPUTDIR)/%.o,$(notdir $(SRC)))

$(TARGET):$(SRC)
	$(CC) -c $< -o $@

以其中一个为例,SRC通过wildcard *.c查找所有c文件,然后通过patsubst讲*.c替换为.o文件,而后通过notdir去掉路径后将obj文件放到../../build文件夹。

$@目标文件

$< 第一个依赖项

$^所有依赖

-c仅编译不链接。因为有的文件是需要其他模块功能,有的还需要进行动\静态库链接,这里先编译等到最后得到全部obj文件后再链接。如果需要头文件可以通过-I../inc指定包含目录。

每个子模块通过上面Makefile文件进行编译后得到obj文件,最后通过一个Makefile进行链接:

TARGET = ../ACT_Drv

CC := gcc

OBJ = $(wildcard *.o)

LIBS = -L../lib -lACTS2200_64

$(TARGET):$(OBJ)
	$(CC) $^ -o $@ $(LIBS)

-L指定文件夹 -l库名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值