我有一个程序,它的一些来源是生成的。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>
“生成”命令创建 Engine.cfg(文本文件)、foo.cpp 和 bar.cpp
当我在某些平台上运行它时,有时,gmake 在生成和编译非生成后停止,说它没有从生成的源创建对象的规则。
我想我知道问题出在哪里 - gmake 在创建文件之前评估了依赖项。但是,我看不到如何正确编写它。而且我也不明白为什么它有时只会失败。
编辑示例代码现在更加完整。(当然,原版有更多的文件和选项)