【问题标题】:Calling other makefile from make从 make 调用其他 makefile
【发布时间】:2015-10-16 19:23:25
【问题描述】:

我已经看到this 的问题,但不知何故仍然无法让make 正确地呼叫另一个Makefile。这是我的Makefile

base:
    cd Base && $(MAKE)

Base 是我当前目录的子目录,其中有一个不同的Makefile 用于编译所述文件夹中的文件。但是,当我调用 make 时,我只会得到 nothing to be done for base,而当我从命令行调用 cd Base && make 时,我会得到预期的行为(即发生编译)。如果Base 中的Makefile 有问题,这里也有一份副本:

CC=g++
CFLAGS=-O3 -Wall -pedantic -Werror -c
LINK=g++
LFLAGS=-O3

SRC=main.cpp
OBJ=..\lib\main.o
EXE=..\bin\test.exe

all: $(EXE)

$(EXE): $(OBJ) $(SRC)
    $(LINK) $(LFLAGS) $(OBJ) -o $(EXE)

..\lib\main.o: main.cpp
    $(CC) $(CFLAGS) $< -o $@

【问题讨论】:

标签: makefile mingw


【解决方案1】:

我不确定 $(MAKE) 的含义(我假设只是 'make'),但我以级联方式设置了我的 makefile,其中一个调用另一个以覆盖所有子目录。

每个 makefile 都有一些共同的目标,例如 'all' 和 'clean'。 然后我只是委托给子目录的 makefile 看起来像这样:

.PHONY : all
all:
    cd SubDir1 && make $@
    cd SubDir2 && make $@
    ...

.PHONY : clean
clean:
    cd SubDir1 && make $@
    cd SubDir2 && make $@
    ...

$@ 是一个automatic variable,它将替换目标(上面示例中的“全部”或“干净”)。

这允许您从顶级目录运行'make'、'make clean'、'make all',甚至'make clean all',它会通过makefile中为适当目标指定的子目录递归.因此,如果您在顶部运行“make clean”,则 makefile 列表中的所有目录都将使用“make clean”调用。

即使您没有共同的目标,您仍然可以使用此技术。只需将自动变量 $@ 更改为每个目录的 makefile 的适当目标即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多