2011-02-08 51 views
2

我在debian和ubuntu上交替開發我的C++應用程序,並且informix數據庫的庫根目錄在兩個發行版上都不相同。如果路徑存在,則在Makefile中分配路徑變量

什麼是在Makefile中處理它的好方法,所以我不必每次都手動更改它? 我以爲只是測試目錄的存在,所以它更一般,然後檢查uname或lsb-release或主機名。

如何在條件中分配語法?我得到嘗試#2

// prepare 
INFORMIXDIR_DEB=/usr/informix 
INFORMIXDIR_UBU=/opt/IBM/informix 

// tried #1 
$(INFORMIXDIR_DEB): 
     if [ -d $(INFORMIXDIR_DEB) ]; then INFORMIXDIR=$INFORMIXDIR_DEB; fi; 

// tried #2 
$(INFORMIXDIR_DEB): 
     INFORMIXDIR=$(INFORMIXDIR_DEB) 

// tried #3 
if [ -d $(INFORMIXDIR_UBU) ] ; 
    then INFORMIXDIR=$INFORMIXDIR_UBU; 
fi; 

回答

3

「丟失分隔符」錯誤,但如果你使用了GNU make,你可以編寫shell命令來測試任何你想要的,結果賦值給變量,並與ifeq玩?

+0

更準確:「將結果賦值給變量」?如何在測試條件之後編寫? – groovehunter

+0

@groovehunter:$(shell)的東西。查看gmake手冊獲取完整的信息。我的意思是像完整的邏輯交給shell:$(shell test -d blabla && echo blablaexists)。 – 2011-02-08 11:08:37

+1

好吧,現在我明白了。 'INFORMIXDIR = $(shell test -d/opt/IBM/informix && echo/opt/IBM/informix)' 「shell」之前沒有空格! :) – groovehunter