我看到了this个问题,但仍然无法让make
正确调用另一个Makefile
。这是我的Makefile
:
base:
cd Base && $(MAKE)
Base
是我当前目录的子目录,其中有一个不同的Makefile
用于编译所述文件夹中的文件。但是,当我调用make
时,我只是得到nothing to be done for base
,而当我从命令行执行cd Base && make
时,我得到预期的行为(即编译发生)。如果Makefile
中的Base
出现问题,以下是此内容的副本:
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 $@
答案 0 :(得分:0)
我不确定$(MAKE)是多少(我假设只是&#39; make&#39;)但是我的makefile文件是以级联的方式设置的,其中一个调用另一个为了涵盖所有子目录。
每个makefile都有一些共同的目标,例如&#39; all&#39;并且&#39;清洁&#39; 然后我刚才委托给子目录的makefile看起来像这样:
.PHONY : all
all:
cd SubDir1 && make $@
cd SubDir2 && make $@
...
.PHONY : clean
clean:
cd SubDir1 && make $@
cd SubDir2 && make $@
...
$ @是一个automatic variable,它将取代目标(&#39;所有&#39;或者&#39;清除&#39;在上面的示例中)。
这使您可以运行&#39; make&#39;,&#39; make clean&#39;,&#39; make all&#39;甚至&#39; make clean all&#39;从顶级目录开始,它将通过makefile中为相应目标指定的子目录进行递归。所以如果你跑得干干净的话。在顶部,将使用&#39; make clean&#39;来调用makefile列表中的所有目录。
即使您没有共同的目标,您仍然可以使用此技术。只需为每个目录的makefile更改自动变量$ @和相应的目标。