什麼是對,包括在內置程序Boost庫的最佳實踐Boost庫?查找Makefile中
爲了舉例說明,假設我們的項目採用Boost的正則表達式,並編譯如下:
g++ -lboost_regex -o main main.cpp
...這意味着我可以寫一個Makefile其中只包含以下內容:
LDFLAGS+=-lboost_regex
$ make main
ld: library not found for -lboost_regex
collect2: error: ld returned 1 exit status
:
不幸的是,這並不在我的系統上運行
這是可以理解的,因爲我沒有指定庫路徑,並且Boost安裝在編譯器沒有找到它的位置。
我不想硬編碼在我的Makefile這條道路,很明顯。否則,該項目不能在其他機器上構建。
一個解決辦法是設置LD_LIBRARY_PATH
但this is discouraged。
正常庫中的「真正的」解決方案是使用pkg-config
,例如像這樣:
LDFLAGS+=$(shell pkg-config --libs sqlite3)
......這是解決沿-L/path/to/sqlite/lib -lsqlite3
行的東西。
不幸的是,Boost still doesn’t support pkg-config
。
這讓我陷入兩難境地。似乎沒有確定Boost庫安裝路徑的通用方法。 其他項目如何處理?
(有人建議將環境變量BOOST_ROOT
但似乎並沒有被普遍地存在要麼,你需要手動設置它的.bashrc中/ profile文件的一個文件。)
您可以指定多個'-L'和'-Wl,-rpath'選項,連接器將按順序搜索這些選項。 –
@Maxim True,但你需要硬編碼路徑,並猜測它可能是哪些。在某些情況下,這根本行不通。例如,我在路徑'/ nfs/company_name/research/groupname/subfolder/lib'中安裝了Boost - 你應該如何猜測這條路徑? –
@Konrad:使其成爲glob文件夾的全局搜索! :D – Xeo