2011-08-08 32 views
0

我正在開發一個多平臺C程序。由於每臺機器上都有不同的編譯器,庫位置等,makefile變得相當複雜。我認爲Autoconf/Automake是一個很好的解決方案,儘管我以前使用這些工具的經驗很少。我是否真的需要指定庫位置與automake鏈接?

我的Makefile.am的行爲LIBS=-lX11,但鏈接失敗,並顯示錯誤"/usr/bin/ld: cannot find -lX11"。我可以通過將"-L/usr/X11R6/lib/"添加到LIBS的定義中來解決此問題,但是我應該確實需要這麼做嗎?當我運行./configure,它說:

checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include

所以它看起來像Automake的應該知道在哪裏可以找到它。有沒有辦法可以在Makefile.am中引用它的位置,而不必對其進行硬編碼,因爲X11 libs將位於每臺機器上的不同位置?

回答

1

你的Makefile.am不應該設置LIBS。如果你需要鏈接庫,configure.ac應該包含對庫的檢查,配置腳本會相應地設置LIBS。另外,Makefile.am不應該指定庫的路徑。應該配置每個系統,以便預編譯器可以找到標題並且鏈接器可以找到這些庫。如果未設置系統以便鏈接程序可以找到庫,則正確的解決方案是讓用戶在LDFLAGS中指定位置,而不是在Makefile.am中對某些內容進行硬編碼。 (例如,不要將-L/p/a/t/h添加到Makefile中,您應該將LDFLAGS = -L/p/a/t/h添加到configure調用中。)

+0

感謝提示。我在那裏有AC_CHECK_LIB(X11,XOpenDisplay),但是當它不能編譯時,我試圖通過changings LIBS來修復它。事實證明,我忽略了./configure說它無法在X11庫中找到XOpenDisplay函數。這可能是真正的問題。 – Tom

相關問題