В этой заметке я хочу рассмотреть тему сборки проектов использующих библиотеки Boost. Мы рассмотрим проект из исполняемого файла использующего Boost Thread и двух библиотек использующих Boost Unit Test Framework.
Первым делом необходимо установить значения переменных отвечающих за тип линковки библиотек (статическая или динамическая):
set (Boost_USE_STATIC_LIBS ON)
И использование многопоточности библиотеками:
set (Boost_USE_MULTITHREADED ON)
После этого можно выполнить уже знакомую по заметке о CMake и QT команду find_package:
find_package (Boost COMPONENTS список_нужных_модулей REQUIRED)
Дополнительно можно указать необходимую версию Boost:
find_package (Boost 1.35.0 COMPONENTS список_нужных_модулей REQUIRED)
В случае если Boost корректно установлен, результатом работы команды будет создание переменных содержащих директории с заголовочными файлами Boost и пути к необходимым библиотекам:
include_directories(${Boost_INCLUDE_DIRS}) ... target_link_libraries (${PROJECT} ${Boost_LIBRARIES})
Дополнительная информация
На некоторых платформах могут возникать ошибки линковки при использовании многопоточности. Для решения данной проблемы необходимо добавить следующую команду:
find_package (Threads) ... target_link_libraries (${PROJECT} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
Пример готового файла для CMake
cmake_minimum_required (VERSION 2.6) set (PROJECT test) set (HEADERS ../test.h) set (SOURCES ../test.cpp) set (BOOST_COMPONENTS thread filesystem) set (Boost_USE_STATIC_LIBS ON) set (Boost_USE_MULTITHREADED ON) project (${PROJECT}) include_directories (../) find_package (Threads) find_package (Boost COMPONENTS ${BOOST_COMPONENTS} REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) add_executable (${PROJECT} ${HEADERS} ${SOURCES}) target_link_libraries (${PROJECT} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
Шаблон для сборки приложения использующего Boost
В архиве находится шаблон CMake-файла используя который вы сможете быстро создать проект использующий Boost. Просто отредактируйте несколько переменных находящихся в самом начале файла:
set (PROJECT имя_проекта) set (HEADERS список_заголовочных_файлов) set (SOURCES список_файлов_с_реализацией) set (LIBRARIES список_библиотек) set (BOOST_COMPONENTS список_модулей) set (Boost_USE_STATIC_LIBS ON) set (Boost_USE_MULTITHREADED ON)
>В случае если Boost корректно установлен
Я правильно понимаю что если не корректно установлен единственный способ это руками прописывать к нему путь?
Begemot
4 марта 10 17:19
Правильно. А еще установить правильно для Windows – это прописать в системную переменную путь к корневой директории boost (надо убедиться, что boost был собран), остальное модуль find_boost сделает сам.
Максим Тремпольцев
4 марта 10 20:42