2015-04-02 43 views
2

我有使用configure腳本生成config.inc文件,其中包含了一些變量定義和makefile是進口那些配置有沒有辦法告訴我的生成文件輸出一個自定義的錯誤消息,如果某個包含文件沒有找到?

include config.inc 

困擾我的事情是,如果用戶試圖直接運行makefile不首先運行configure他們得到一個無用的錯誤消息:

makefile:2: config.inc: No such file or directory 
make: *** No rule to make target 'config.inc'. Stop. 

有我的方式來產生更好的錯誤信息,指導用戶連接首先運行配置腳本,而不訴諸於從configure內部生成完整的makefile的autoconf策略?

回答

0

我放棄了,決定用autoconf和automake的處理我的makefile代的需求。

5

當然,沒問題;只是做這樣的事情:

atarget: 
     echo here is a target 

ifeq ($(wildcard config.inc),) 
    $(error Please run configure first!) 
endif 

another: 
     echo here is another target 

include config.inc 

final: 
     echo here is a final target 

注意這是絕對特定於GNU make;有沒有便攜的方式來做到這一點。

編輯:上面的例子將正常工作。如果文件config.inc存在,那麼它將被包括在內。如果文件config.inc不存在,那麼make會在讀取生成文件時退出(作爲error函數的結果),並且永遠不會到達include行,因此不會有關於缺少包含文件的模糊錯誤。這就是原來的海報所要求的。

EDIT2:下面是一個例子來看:

$ cat Makefile 
all: 
     @echo hello world 

ifeq ($(wildcard config.inc),) 
    $(error Please run configure first!) 
endif 

include config.inc 

$ touch config.inc 

$ make 
hello world 

$ rm config.inc 

$ make 
Makefile:5: *** Please run configure first!. Stop. 
+0

我試過了,它不能工作,不幸的是......如果你在ifeq或include之後放置目標,你會在第一個目標之前出現錯誤命令。 Stop.'如果你把它們放在上面,就會發生同樣的'No such file or directory'錯誤。 – spiffman 2015-04-03 01:41:37

+0

我不知道你的意思是「目標」。我的例子中沒有目標。您報告的錯誤表明您正在使用TAB字符或其他東西縮進「ifeq」等:不這樣做。像我給的例子一樣寫。 'ifeq'是_makefile_結構,不應縮進; ifeq和endif開始於第1列,'$(error ...)'不是縮進或縮進幾個空格(不是TAB),而是將整個事件放在'include'行之前。 – MadScientist 2015-04-03 11:53:36

+0

是的,我明白了。但是在某些時候,您想要將目標添加到您的Makefile中以使用它。沒有辦法在你的Makefile中放入任何目標,並獲得OP最初要求的效果。我做了*不*縮進'ifeq',我原樣複製它並嘗試添加一個目標。 – spiffman 2015-04-03 19:49:27

相關問題