gmake无法找到生成的源

时间:2013-06-23 05:57:23

标签: 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_FILES)
   <link command>

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

$(OBJDIR)/%.o:%.cpp
   <compile command>

'generate'命令创建Engine.cfg(文本文件),foo.cpp和bar.cpp

当我运行它时,在某些平台上,有时,gmake在生成和编译非生成后停止,表示它没有从中创建对象的规则生成的来源。

我想我知道问题是什么 - 在创建文件之前,gmake评估了依赖关系。但是,我没有看到如何正确编写它。我也不明白为什么它有时会失败。

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

1 个答案:

答案 0 :(得分:0)

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

我这样解决了:

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

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

到目前为止一直很好。