如何让makefile在子目录makefile中找到目标

如何让makefile在子目录makefile中找到目标,第1张

概述如何使顶级Makefile调用子目录Makefile中的所有目标? 我的文件夹结构是这样的 /Makefile/src/Makefile 我编写/ src / Makefile中的所有目标,但现在我想编写另一个/ Makefile来简化我的工作.如何编写这个顶级Makefile? 您可以在TOP makefile中使用 all: @$(MAKE) -C src 例如,如果你不在子目录中使 如何使顶级Makefile调用子目录Makefile中的所有目标?

我的文件夹结构是这样的

/Makefile/src/Makefile

我编写/ src / Makefile中的所有目标,但现在我想编写另一个/ Makefile来简化我的工作.如何编写这个顶级Makefile?

解决方法 您可以在top makefile中使用

all:    @$(MAKE) -C src

例如,如果你不在子目录中使用makefile,你可以使用somename.mk

all:    @$(MAKE) -C src -f somename.mk

我告诉你我的例子,我的DIR看起来像:

topDIR-- Makefile||-- deBUG|   |-- deBUG.c|   |-- deBUG.h|   |-- deBUG.mk|   |-- instrument.c|   `-- uart_print.c|-- driver|   |-- driver.c|   |-- driver_ddi.c|   |-- driver_ddi.h|   |-- driver.h|   `-- driver.mk|-- include|   `-- common.h|-- Makefile|-- mw|   |-- manager.c|   `-- mw.mk|-- root|   |-- main.c|   `-- root.mk

我的top makefile看起来像:

MAKE_DIR = $(PWD)ROOT_DIR    := $(MAKE_DIR)/root DRV_DIR     := $(MAKE_DIR)/driverINCLUDE_DIR := $(MAKE_DIR)/includeDEBUG_DIR   := $(MAKE_DIR)/deBUGINC_SRCH_PATH := INC_SRCH_PATH += -I$(ROOT_DIR)INC_SRCH_PATH += -I$(DRV_DIR) INC_SRCH_PATH += -I$(INCLUDE_DIR)INC_SRCH_PATH += -I$(DEBUG_DIR)liB_SRCH_PATH :=liB_SRCH_PATH += -L$(MAKE_DIR)/libscolor_ON = colorcolor_OFF = CC = $(color_ON)gcc#CC = $(color_OFF)gccLD = ldliNT = splintliBS := -ldriver -ldeBUG -lmw -lm -lpthreadCFLAGS :=CFLAGS += $(INC_SRCH_PATH) $(liB_SRCH_PATH) CFLAGS += -Wall -O -ggdb -Wstrict-prototypes -Wno-pointer-sign -finstrument-functions -fdump-rtl-expandCFLAGS += -DDEBUG -D_REENTRANTLDFLAGS :=export MAKE_DIR CC LD CFLAGS LDFLAGS liBS liNT INC_SRCH_PATHall:    @$(MAKE) -C deBUG -f deBUG.mk    @$(MAKE) -C driver -f driver.mk    @$(MAKE) -C mw -f mw.mk    @$(MAKE) -C root -f root.mk.PHONY: cleanclean:    @$(MAKE) -C deBUG -f deBUG.mk clean    @$(MAKE) -C driver -f driver.mk clean    @$(MAKE) -C mw -f mw.mk clean    @$(MAKE) -C root -f root.mk clean.PHONY: lintlint:    $(MAKE) -C deBUG -f deBUG.mk lint

它会在编译期间调用sub DIR * .mk.子DIR makefile,我只是写一个简单的例子供你参考:

liB = $(MAKE_DIR)/libs/yourmodulename.aSRCS = $(wildcard *.c)OBJs = $(patsubst %.c,%.o,$(SRCS))$(liB): $(OBJs)    @mkdir -p ../libs    @$(AR) cr $@ $^    @echo "    Archive    $(notdir $@)"$(OBJs): $(SRCS)    @$(CC) $(CFLAGS) -c $^    @echo "    CC        $(OBJs)".PHONY: cleanclean:    @$(RM) -f $(liB) $(OBJs)    @$(RM) -f *.expand    @echo "    Remove Objects:   $(OBJs)"    @echo "    Remove librarIEs:  $(notdir $(liB))".PHONY: lint lint:    $(liNT) $(INC_SRCH_PATH) $(SRCS)

对于makefile,生成目标文件有点不同,因为我使用sub makefile生成liB文件,并使用root.mk生成目标:

PROG = ../prog/DEMOSRCS = $(wildcard *.c)OBJs = $(patsubst %.c,$(SRCS))$(PROG): $(SRCS)    @mkdir -p ../prog    @$(CC) $^ $(CFLAGS) -Wl,-Map=$(PROG).map $(liBS) -o $@    @echo "    Generate Program $(notdir $(PROG)) from $^".PHONY: cleanclean:    @$(RM) -f $(OBJs) $(PROG)    @$(RM) -f *.expand    @$(RM) -rf ../prog ../libs    @echo "    Remove Objects:   $(OBJs)"    @echo "    Remove librarIEs:  $(notdir $(PROG))"
总结

以上是内存溢出为你收集整理的如何让makefile在子目录makefile中找到目标全部内容,希望文章能够帮你解决如何让makefile在子目录makefile中找到目标所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存