Какова наилучшая практика включения библиотек 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/профиля.)
Вы можете указать несколько опций '-L' и' -Wl, -rpath, ', и компоновщики будут искать их по порядку. –
@Maxim True, но вам нужно жестко закодировать пути и просто угадать, какие из них могут быть. В некоторых случаях это просто не работает. Например, у меня установлен Boost в пути '/ nfs/company_name/research/groupname/subfolder/lib' - как вы должны догадываться об этом пути? –
@Konrad: сделайте это glob-поиск папки 'boost'! : D – Xeo