linux中makefile高级用法--makefile调用makefile

一、介绍
在大型项目中,makefile调用makefile很常见,也很方便,这里给出调用方法

二、实例
1、代码树
在这里插入图片描述

app_top下,有顶层makefile和编译工具的设置文件Rules.make,负责整个应用的编译
common_modules下,有makefile,负责common_modules这个文件夹的编译
libmqtt下,有makefile,负责mqtt代码的编译

2、编译过程
在编译整个项目的时候,顶层makefile调用common_modules下makefile
common_modules下makefile调用libmqtt下的makefile

3、makefile实现
1、工具链的定义Rules.mak

#################################################
## Make tools
#################################################
ARM_TOOLS_PATH = mipsel-linux-
CC          = $(ARM_TOOLS_PATH)gcc
AS          = $(ARM_TOOLS_PATH)as
LD          = $(ARM_TOOLS_PATH)ld
AR	    = $(ARM_TOOLS_PATH)ar
STRIP	    = $(ARM_TOOLS_PATH)strip
RANLIB    = $(ARM_TOOLS_PATH)ranlib
MAKE        = make

2、顶层makfile

#################################################################
#
#  This file automatically generated - DO NOT EDIT!
#
#################################################################
include Rules.mak

COMM_MODULE_PATH  = common_modules
APP_MODULE_PATH   = app
NM_MODULE_PATH   =  net_manage
APP_PATH          = build

dep:
	$(MAKE) dep -C $(COMM_MODULE_PATH)
	$(MAKE) dep -C $(APP_PATH)


#=========================================================================
#-------------------------------------------------------------------------
# make all
#-------------------------------------------------------------------------
all:common_modules  app
	$(RALINK_ROOTDIR)/mkromfs_mg6001c.sh

	
#==========================================================================
#--------------------------------------------------------------------------
# make clean
#--------------------------------------------------------------------------
clean:
	$(MAKE) clean -C $(COMM_MODULE_PATH)
	$(MAKE) clean -C $(APP_PATH)

#==================================================================
#------------------------------------------------------------------
#
#------------------------------------------------------------------

.PHONY:common_modules
common_modules:
	$(MAKE) all  -C $(COMM_MODULE_PATH)

.PHONY:app
app:
	$(MAKE) all  -C $(APP_PATH)
	

3、common_modules下makefile

include ./../Rules.mak
MAKE=make

TARGET_PATH             = target
CLI_PATH        =  cli
MQTT_PATH = libmqtt

dep:
	$(MAKE) dep  -C $(TARGET_PATH)
	$(MAKE) dep  -C $(CLI_PATH)
	
clean:
	$(MAKE) clean  -C $(TARGET_PATH)
	$(MAKE) clean  -C $(CLI_PATH)
	$(MAKE) clean  -C $(MQTT_PATH)



all:mqtt target cli 

.PHONY:mqtt
mqtt:
	$(MAKE) all  -C $(MQTT_PATH)	

.PHONY:target
target:
	$(MAKE) all  -C $(TARGET_PATH)

.PHONY:cli
cli:
	$(MAKE) all  -C $(CLI_PATH)
	

4、libmqtt下的makefile实现

#build tools
include ../../Rules.mak
VERSION = V1.0

#target
LIB_TARGET = mqtt_fun.a

#add define
DEBUG = -DMQTTCLIENT_PLATFORM_HEADER=MQTTLinux.h

#add build options
CFLAGS += -O -w -lpthread -lm

#add include files path
INCLUES += -I ./paho.mqtt.embedded-c/MQTTClient-C/src/linux
INCLUES += -I ./paho.mqtt.embedded-c/MQTTPacket/src
INCLUES += -I ./paho.mqtt.embedded-c/MQTTClient-C/src
INCLUES += -I ./cJSON
INCLUES += -I ./http
INCLUES += -I ./mqttCOM

#add src files path
VPATH += ./paho.mqtt.embedded-c/MQTTClient-C/src/linux
VPATH += ./paho.mqtt.embedded-c/MQTTPacket/src
VPATH += ./cJSON
VPATH += ./http
VPATH += ./mqttCOM

#add lib files path
#LIBS +=  
#LIB_PATH += -L .

#obj files
OBJS = MQTTClient.o mqtt_top.o mqtt_scheduler.o cJSON.o mqtt_fun_alarm.o \
mqtt_fun_device_status.o mqtt_fun_device_tag.o mqtt_fun_log.o mqtt_fun_ota.o mqtt_fun_set_para.o \
mqtt_fun_vpn.o mqtt_interface.o MQTTLinux.o MQTTFormat.o MQTTPacket.o \
MQTTDeserializePublish.o MQTTConnectClient.o MQTTSubscribeClient.o MQTTSerializePublish.o \
MQTTConnectServer.o MQTTSubscribeServer.o MQTTUnsubscribeServer.o MQTTUnsubscribeClient.o

#build rules
.PHONY:all
all:$(OBJS)
	cp ./paho.mqtt.embedded-c/MQTTClient-C/src/MQTTClient.c .
	sed -e 's/""/"MQTTLinux.h"/g' ./paho.mqtt.embedded-c/MQTTClient-C/src/MQTTClient.h > MQTTClient.h
	@rm -rf ../../lib/mqtt_fun.a
	@rm -rf build
	@mkdir -p build
	$(AR) -rc $(LIB_TARGET) $^
	@mv *.o build
	@mv *.a build
	@cp build/mqtt_fun.a ../../lib/

%.o:%.c
	$(CC) $(INCLUES) -c $^ -o $@ $(CFLAGS) $(DEBUG)

clean:
	rm -rf mqtt_fun.a *.o MQTTClient.h
	rm -rf ../../lib/mqtt_fun.a 
	echo "rm -rf mqtt_fun.a *.o"

5、编译操作
在命令行进入顶层目录
make all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值