[英]Find Boost libraries in Makefile
在構建過程中包含Boost庫的最佳實踐是什么?
為了說明,假設我們的項目使用了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
但不鼓勵這樣做 。
普通庫的“真正”解決方案是使用pkg-config
,例如:
LDFLAGS+=$(shell pkg-config --libs sqlite3)
...解決了-L/path/to/sqlite/lib -lsqlite3
。
不幸的是, Boost仍然不支持pkg-config
。
這讓我處於兩難境地。 似乎沒有一種確定Boost庫安裝路徑的通用方法。 其他項目如何處理這個問題?
(有人建議使用環境變量BOOST_ROOT
但這似乎並不普遍存在,你需要在其中一個bashrc / profile文件中手動設置它。)
因為我是建議使用BOOST_ROOT
,所以我也可以把它作為答案。
背景:如果未在boosts安裝根目錄內執行,則Boost的bjam
構建程序需要BOOST_ROOT
環境變量。
有了這個想法,人們可能還會“依賴”它,即當make
被調用時始終將它作為完整的環境變量調用,或者只是在會話/命令期間設置它,如BOOST_ROOT=/foo/bar/boost make
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.