2013-12-10 140 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