Как должен выглядеть мой файл CMake для связывания моей программы с библиотекой Boost в Ubuntu?
Ошибки, отображаемые во время работы make
:
main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
Главный файл действительно прост:
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char** argv) {
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
;
return 0;
}
Мне это удалось. Единственные строки, которые я добавил в свои файлы CMake, были:
target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
target_link_libraries
послеadd_executable
иfind_package
линий, поэтому все связанные компоненты известны.Вот моя конфигурация:
источник
Адаптируя ответ @MOnsDaR для современного синтаксиса CMake с импортированными целями, это будет:
Обратите внимание, что указывать подключаемые каталоги вручную не обязательно, поскольку об этом уже позаботились с помощью импортированной цели
Boost::program_options
.источник
The FindBoost.cmake
изначально создает их только в том случае, если в нем явно указана ваша версия Boost. В какой-то момент это должно было быть улучшено, но я все еще наблюдаю сбои с CMake 3.10.2 и Boost 1.66 (новейшие копии от brew).Какая библиотека Boost? Многие из них являются чистыми шаблонами и не требуют привязки.
Теперь, когда на самом деле показан конкретный пример, который говорит нам, что вам нужны параметры программы Boost (и даже больше сообщило нам, что вы используете Ubuntu), вам нужно сделать две вещи:
libboost-program-options-dev
чтобы вы могли ссылаться на него.cmake
ссылку противlibboost_program_options
.Я в основном использую Makefiles, так что вот прямое использование командной строки:
Кажется, это не так уж много.
Для CMake вам нужно добавить boost_program_options в список библиотек, а IIRC это делается через
SET(liblist boost_program_options)
вашCMakeLists.txt
.источник
Двумя способами, используя системный путь установки по умолчанию, обычно
/usr/lib/x86_64-linux-gnu/
:Если вы устанавливаете Boost в локальный каталог или выбираете локальную установку вместо системной, вы можете сделать это следующим образом:
Обратите внимание, что в приведенном выше каталоге
/home/xy/boost_install/lib/
я устанавливаю Boost:Если вас интересует, как использовать локально установленный Boost, вы можете увидеть этот вопрос. Как мне заставить CMake найти мою альтернативную установку Boost? .
источник
Вот мой вывод:
источник
find_package(Boost QUIET REQUIRED)
вашей целью (DB32) и укажите ссылку на нее:target_link_libraries(DB32 PUBLIC Boost::headers)