2011-05-17 81 views
2

我有一個在RedHat框中開發的X11應用程序。當我轉移到CentOS時,X11庫也移動了。從/usr/X11R6/lib64/usr/X11R6/lib(即使兩者都運行64位),並且我在其他Linux/Unix系統的其他地方看到了它們。與X11庫鏈接的最佳做法

我已經使用-I-L編譯標記直接指向makefile中的X11 lib目錄,但是現在已經意識到,這需要在切換機器時更改生成文件。

我的問題是,爲了便於攜帶...我應該在makefile中繼續使用-I-L嗎?如果是這樣,有沒有辦法自動檢測位置?或者,我應該只依賴於具有這些LD_LIBRARY_PATH的用戶嗎?

回答

0

如果你依靠GNU做,你可以這樣做:

X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib64/libX11.so.*))) 
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib/libX11.so.*))) 
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/lib/libX11.so.*))) 
# and so on for whatever paths you come across 

LDFLAGS += -L$(X11LIBS) -R$(X11LIBS) 

這允許用戶覆蓋X11LIBS命令行(make X11LIBS=/usr/local/X11R6/lib)上,並嘗試幾個位置,如果沒有用戶選項給出。

你甚至可以中止構建,如果沒有路徑,則像

ifeq ($(X11LIBS),) 
$(error Could not find X11 library path, please specify in X11LIBS 
endif 

這一切只是如果你的內容與限制Makefile文件的便攜性的選項:非GNU做很可能不會對這些宏感到滿意。