Makefile gmake can';无法找到生成的源

Makefile gmake can';无法找到生成的源,makefile,gnu-make,Makefile,Gnu Make,我有一个程序,它的一些源代码是生成的。makefile的相关部分如下所示: OUTPUT_FILE = libEngine.so CONF_FILES = foo.tgp bar.tgp GENERATED = Engine.cfg SRCS = main.cpp foo.cpp bar.cpp OBJ_FILES = $(SRCS:%.cpp=$(OBJDIR)/%.o) all: $(OUTPUT_FILE) $(OUTPUT_FILE): $(GENERATED) $(OBJ_FIL

我有一个程序,它的一些源代码是生成的。makefile的相关部分如下所示:

OUTPUT_FILE = libEngine.so
CONF_FILES = foo.tgp bar.tgp
GENERATED = Engine.cfg
SRCS = main.cpp foo.cpp bar.cpp 
OBJ_FILES = $(SRCS:%.cpp=$(OBJDIR)/%.o)

all: $(OUTPUT_FILE)

$(OUTPUT_FILE): $(GENERATED) $(OBJ_FILES)
   <link command>

$(GENERATED): $(CONF_FILES)
   generate -p Engine $(CONF_FILES)

$(OBJDIR)/%.o:%.cpp
   <compile command>
OUTPUT_FILE=libEngine.so
CONF_FILES=foo.tgp bar.tgp
已生成=Engine.cfg
SRCS=main.cpp foo.cpp bar.cpp
OBJ_文件=$(SRCS:%.cpp=$(OBJDIR)/%.o)
全部:$(输出文件)
$(输出文件):$(生成的)$(对象文件)
$(已生成):$(配置文件)
生成-p引擎$(CONF_文件)
$(OBJDIR)/%.o:%.cpp
“generate”命令创建Engine.cfg(文本文件)、foo.cpp和bar.cpp

当我在某些平台上运行它时,有时gmake会在生成和编译未生成的对象后停止,说它没有从生成的源创建对象的规则

我想我知道问题是什么-gmake在创建文件之前评估了依赖关系。然而,我不知道如何正确地写它。我也不明白为什么它只是偶尔失败


编辑示例代码现在更完整了。(当然,原版有更多的文件和选项)

发现了问题,它与VPATH有关。cpp文件不是在当前目录中生成的,而是在另一个目录中,在包含的makefile中的某个地方定义的。我猜如果文件不存在,VPATH位置就不起作用

我这样做:

all: $(GENERATED) $(OBJ_FILES)
     $(MAKE) $(OUTPUT_FILE)

$(OUTPUT_FILE): $(GENERATED) $(OBJ_FILES)
    <link command>
all:$(已生成)$(OBJ_文件)
$(生成)$(输出文件)
$(输出文件):$(生成的)$(对象文件)

到目前为止还不错。

那么变量
GENERATED
在哪里以及如何得到它的值呢?比如:GENERATED=table.cfg GENERATED\u SRCS=gen1.cpp gen2.cppWait。。。以下哪些规则无法运行?你能给我们一个最简单完整的例子吗?嗯。。。我不确定哪个是失败的规则。运行gmake之后,我有foo.cpp bar.cpp和main.o,它说没有创建foo.o的规则