工作目录中有以下层次结构:
config (directory)
main.cpp
Makefile
工作目录中 Makefile 的内容:
main: main.o
g++ -Wall -std=c++1y main.o ./config/load_config.o -o main
main.o: config/load_config.o
g++ -Wall -std=c++1y -o main.o -c main.cpp
clean:
rm *.o
在配置目录中是:
load_config.cpp
load_config.h
Makefile
配置/生成文件的内容
load_config.o: load_config.cpp
g++ -Wall -std=c++1y -o load_config.o -c load_config.cpp
clean:
rm *.o
如果工作目录是 config,那么config/Makefile运行时不会出错。结果,我们有了config/load_config.o 文件。我们cd ../ 之后,我们在主目录下执行 make,程序正常构建。但是,如果缺少config/load_config.o,则不再构建该程序。问题是如何更改主 Makefile 以便它首先在 config 文件夹中执行 make(收集的config/load_config.o)
我会这样改变它:
解释:
$^
- 所有先决条件的列表$<
- 第一先决条件$@
- 规则的目标$(MAKE) -C каталог цель
是在目录中递归调用gnu/make程序的推荐方法之一$(@D)
— 当目标表示为 时каталог/файл
,返回каталог
$(@F)
— 当目标表示为 时каталог/файл
,返回файл