2013-12-10 141 views
0

我有一个需要头文件的C++项目。我使用某些文件(.srv)的python脚本构建了一些头文件。如果标题丢失或srv文件已更改,我想让我的Makefile运行我的脚本。 我加入这行到我的生成文件:Makefile:忽略模式规则

include/services/%.h : include/srv/%.srv 
     python headersFromSRV.py $< 

当我尝试建立我的项目,我得到的错误信息:

fatal error: 'include/services/robot_device_list.h' file not found 
#include "include/services/robot_device_list.h" 

这是逻辑文件不存在,但它不会调用规则来创建它。 我的规则有什么问题?

回答

0

规则本身是可以的,但也许你的问题是makefile不知道它是一个需求。 我想错误信息来自你的C/C++编译器,他正在构建一些其他目标。您可能需要将robot_device_list.h作为依赖项添加到该目标,因此makefile知道他需要首先构建它。 例如

foo.exe: foo.o 
    (your link statement) 

foo.o: foo.c include/services/robot_device_list.h 
    (your compile statement) 
+0

你可能是对的。构建另一个目标的规则在另一个我没有的Makefile中定义,并且包含在我的Makefile中。我只定义编译目标所需的* .cpp源列表。不幸的是,第二个Makefile只接受这个列表中的* .cpp文件并忽略其他文件。有没有办法在我的* .cpp上添加依赖项,例如不更改规则来构建目标? – Blink

+0

如果您的makefile包含在内,您可以将任何种类的规则添加到您的makefile中,如示例中的最后一个。 – geert3

+0

我做了一个基本的规则,这取决于我的头文件。我的所有标题都成功创建了!我必须在包含之后放置规则,否则主要目标不会被构建。谢谢。 – Blink