【发布时间】:2018-10-31 17:25:37
【问题描述】:
最近我们的项目结构发生了变化,现在我们有了子目录。我的旧 makefile 假设并只是说:
SOURCES := $(wildcard $(SRCDIR)/*.cpp)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
现在有了任意深度嵌套目录,它改为
SOURCES := $(wildcard $(SRCDIR)/**/*.cpp)
但我仍然希望所有对象都放在同一个目录中,我将如何更改 OBJECTS(或编译?)定义以使其不会失败,因为对象目录中不存在给定的子目录。
编辑: 有人将此标记为重复 Getting make to create object files in a specific directory
现在我被要求说这有什么不同。我觉得这是侮辱性的,因为我为什么要提供为什么这是重复的原因。将其标记为重复的人应提供原因。
我什至不知道从哪里开始,为什么它会有所不同。您不妨将我链接到一些 excel 问题,然后问我为什么它不同。
向我解释为什么链接的问题应该回答我的问题,然后我会告诉你它是或不是。
【问题讨论】:
-
首先,您的声明
SOURCES := $(wildcard $(SRCDIR/**/*.cpp)不会像您期望的那样做(在$(SRCDIR)下的各级目录中查找*.cpp的所有实例)。**工具是一些 shell(如zsh)支持的高级类型的 globbing,但它不受标准 Cglob()函数的支持,这是make用于wildcard的函数。您的 globbing 表达式在功能上与$(SRCDIR)/*/*.cpp相同(正好是一个目录级别)。要查找您需要的所有文件$(shell find $(SRCDIR) -name \*.cpp) -
其次,我同意链接的重复问题并不完全相同,但是当您寻求帮助时,被试图回答您问题的人侮辱是不合适的。也许您没有看到引用的问题如何适用,那么您可以要求澄清,但没有必要如此积极地回应。我想说一个更好的重复问题是:stackoverflow.com/questions/52974743/… 实际上给出的答案与下面提供的 Beta 完全相同。
标签: makefile