Makefile:使用多个Makefile

MadZarx

我有一个项目,其中包含许多makefile。因为有时我只需要编译项目的某些部分,所以我决定在每个目录中只有一个makefile。但是,当我想运行包含所有其他文件的主makefile来编译我的项目时,它给了我很多错误。这是我的项目树:

根目录'makefile'

-folder1'foo1.c foo2.c makefile'

-folder2'makefile'

--folder2-1'foo3.c foo4.c makefile'

--folder2-2'foo5.c makefile'

最后一个目录中的每个makefile已包含在其上层makefile中。但是它不会运行主makefile。我对GNU make真的很陌生,我想要这样的东西,但我不知道怎么做。我只是写了一些make脚本,但是没有用。我只想拥有一些可以分别编译项目部分或使用多个makefile编译整个项目的东西。

陈怎么

无论如何,我向您展示一些东西,希望能对您有所帮助:

all:
    @$(MAKE) -C subfolder

或者如果您想使用* .mk作为子makefile,则可以编写:

all:
    @$(MAKE) -C busfolder -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

和我的顶部makefile看起来像:

MAKE_DIR = $(PWD)

ROOT_DIR    := $(MAKE_DIR)/root 
DRV_DIR     := $(MAKE_DIR)/driver
INCLUDE_DIR := $(MAKE_DIR)/include
DEBUG_DIR   := $(MAKE_DIR)/debug

INC_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)/libs


COLOR_ON = color
COLOR_OFF = 
CC = $(COLOR_ON)gcc
#CC = $(COLOR_OFF)gcc
LD = ld

LINT = splint

LIBS := -ldriver -ldebug -lmw -lm -lpthread

CFLAGS :=
CFLAGS += $(INC_SRCH_PATH) $(LIB_SRCH_PATH) 
CFLAGS += -Wall -O -ggdb -Wstrict-prototypes -Wno-pointer-sign -finstrument-functions -fdump-rtl-expand
CFLAGS += -DDEBUG -D_REENTRANT

LDFLAGS :=

export MAKE_DIR CC LD CFLAGS LDFLAGS LIBS LINT INC_SRCH_PATH

all:
    @$(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: clean
clean:
    @$(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

它将在编译过程中调用sub DIR * .mk。该子DIR生成文件,我只写一个简单的例子供您参考:

LIB = $(MAKE_DIR)/libs/yourmodulename.a
SRCS = $(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: clean
clean:
    @$(RM) -f $(LIB) $(OBJS)
    @$(RM) -f *.expand
    @echo "    Remove Objects:   $(OBJS)"

对于生成文件,生成最终目标文件(如a.out)有点不同,因为我使用子生成文件生成LIB文件,并且使用root.mk生成最终目标:

PROG = ../prog/DEMO

SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

$(PROG): $(SRCS)
    @mkdir -p ../prog
    @$(CC) $^ $(CFLAGS) -Wl,-Map=$(PROG).map $(LIBS) -o $@
    @echo "    Generate Program $(notdir $(PROG)) from $^"

.PHONY: clean
clean:
    @$(RM) -f $(OBJS) $(PROG)
    @$(RM) -f *.expand
    @$(RM) -rf ../prog ../libs
    @echo "    Remove Objects:   $(OBJS)"
    @echo "    Remove Libraries:  $(notdir $(PROG))"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Makefile:使用多个Makefile

来自分类Dev

Makefile:使用多个Makefile

来自分类Dev

使用`main`的多个文件的Makefile

来自分类Dev

makefile对多个目标使用相同的代码

来自分类Dev

使用Makefile输出到多个文件

来自分类Dev

C-使用makefile的多个定义

来自分类Dev

使用 Makefile 高效编译多个测试文件

来自分类Dev

使用多个 .c 文件构建 makefile 项目

来自分类Dev

Makefile编译多个目标

来自分类Dev

Makefile的main的多个定义

来自分类Dev

makefile:多个自动变量

来自分类Dev

一次创建多个目标文件而不使用makefile?

来自分类Dev

Makefile不会使用touch创建多个txt文件

来自分类Dev

如何使用Makefile在目录中编译多个单独的C文件?

来自分类Dev

转义makefile变量(供内部makefile使用)

来自分类Dev

Makefile中的多个Shell命令

来自分类Dev

Makefile编译多个mex函数

来自分类Dev

带通配符的 makefile 多个 main

来自分类Dev

生成库的多个实例的 Makefile

来自分类Dev

makefile 多个目标模式。停止

来自分类Dev

Makefile和$$的使用

来自分类Dev

C ++-使用g ++的Makefile

来自分类Dev

在RStudio中使用Makefile

来自分类Dev

Make使用旧的Makefile

来自分类Dev

使用Flex的Makefile错误

来自分类Dev

GNU Makefile-多个目标的通用Makefile

来自分类Dev

Eclipse CDT使用makefile.init,makefile.defs,makefile.targets生成makefile

来自分类Dev

Makefile:多个目标的相同规则

来自分类Dev

Makefile中的模式规则和多个目录