Усиление зависимостей сборки и библиотекиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Усиление зависимостей сборки и библиотеки

Сообщение Anonymous »

Я использую сборку boost (https://www.bfgroup.xyz/b2/tutorial.html) для создания относительно большого проекта на C++. Я все еще пытаюсь кратко указать зависимости библиотеки. Из документации (https://www.boost.org/doc/libs/latest/t ... index.html) я понимаю, что при правильном указании зависимости должны отслеживаться, поскольку библиотеки связаны между собой. Чтобы привести конкретный пример, основанный на моем коде, но максимально упрощенный, вот файл Jamroot

Код: Выделить всё

project
: requirements
$(TOP)
;

constant BOOST_LIB_PATH : /usr/lib/x86_64-linux-gnu ;

lib boost_filesystem : : boost_filesystem $(BOOST_LIB_PATH)  ;
lib boost_system     : : boost_system     $(BOOST_LIB_PATH) ;
lib boost_test : : boost_unit_test_framework  $(BOOST_LIB_PATH) ;

lib global : Wavelet.cpp  boost_filesystem  boost_system ;

exe fileutil_test : test_fileutil.cpp  global  boost_test ;
Я ожидаю, что сборка boost понимает, что когда fileutil_test связан, он знает, что глобальная библиотека библиотеки должна быть связана с boost_filesystem (и boost_system), и поэтому fileutil_test также будет связан с этими двумя. По крайней мере, это моя интерпретация предложения

"Когда библиотека имеет общую библиотеку в качестве источника или статическая библиотека имеет другую статическую библиотеку в качестве источника, тогда любая цель, связывающаяся с первой библиотекой, также автоматически ссылается на свою исходную библиотеку."

в документации. Однако, похоже, это не так, поскольку я получаю сообщения об ошибках о неопределенных ссылках от компоновщика. Если я изменю последнюю строку на

Код: Выделить всё

exe fileutil_test : test_fileutil.cpp  global  boost_test boost_filesystem  boost_system ;
все прекрасно линкуется. Однако, когда ситуация усложняется (когда разные библиотеки зависят от разных подмножеств других библиотек), это становится очень утомительным, и я подумал, что эту проблему должна решить сборка Boost.
Основываясь на различных источниках, я также пробовал этот вариант

Код: Выделить всё

lib global : Wavelet.cpp  : boost_filesystem  boost_system ;
но с тем же результатом.
Я делаю что-то не так? Есть ли у меня неправильные ожидания? Любые подсказки приветствуются

Подробнее здесь: https://stackoverflow.com/questions/798 ... pendencies
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»