【发布时间】:2020-04-25 02:01:56
【问题描述】:
我正在尝试构建一个包含多个模块的项目。文件树如下所示:
lib_one、lib_two 和 Main.cpp 的各个 Makefile 工作正常,为项目生成 2 个 DLL 和 EXE,但需要进入每个目录并为每个模块执行命令“make”。
我现在想要一个位于顶级目录 ('/project') 中的 Makefile,它会触发所有其他模块(DLL 和 EXE)的构建一次。根据一些搜索结果,我得到了类似的结果:
lib_one := ./src/lib_one
lib_two := ./src/lib_two
libraries := $(lib_one) $(lib_two)
player := ./src
.PHONY: all $(player) $(libraries)
all: $(player)
$(player) $(libraries):
$(MAKE) --directory=$@
$(player): $(libraries)
当我执行命令“make”时,我得到了这个错误:
Makefile:10: ***. Stop.
(第 10 行是这一行:$(MAKE) --directory=$@)。除了解决此错误的方法外,我还在寻找一种方法来完成这 3 件事:
1)
所有模块(DLL 和 EXE)的目标文件 (*.o) 应存储在目录 build 与目录 src 相同的位置。
2)
最终文件(*.dll 和 *.exe)应放置在目录 reelease 旁边的目录 src 和 build 中。
3) 如果第 2 项是可能的,最好将每种类型的文件放在 release 内的特定目录中(bin 用于 *.exe,lib 用于 *.dll 和 shared 用于其他类型)。此外,即使 exe 和 dll 在不同的目录中,也可以从该目录运行可执行文件(使其在 ../lib 以及其他常用位置搜索必要的库?)。
【问题讨论】:
-
确保使用制表符而不是空格来缩进配方行。您发布的代码包含空格。
-
这个非递归的 makefile 可以帮助你:stackoverflow.com/a/58953668/412080