Личный опыт разработки ПО

Сборник рецептов

CMake и Boost

комментариев 10

В этой заметке я хочу рассмотреть тему сборки проектов использующих библиотеки 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)

Файл с шаблоном проекта

23rd Январь 2010
18:48

Рубрика: Разработка,Сборка

Метки: ,

10 комментариев к 'CMake и Boost'

Подписаться на комментарии по RSS или TrackBack.

  1. >В случае если Boost корректно установлен
    Я правильно понимаю что если не корректно установлен единственный способ это руками прописывать к нему путь?

    Begemot

    4 марта 10 17:19

  2. Правильно. А еще установить правильно для Windows — это прописать в системную переменную путь к корневой директории boost (надо убедиться, что boost был собран), остальное модуль find_boost сделает сам.

  3. >В случае если Boost корректно установлен
    А что означает корректная установка?
    Как будет правильно (корректно) собрать под Windows, ну и под Linux/Mac?
    В какой системной переменной стоит прописать путь к библиотеке, в Path или создать свою переменную?

    Спасибо, Максим.

    anton

    28 мая 14 10:27

  4. Проще всего с Linux — надо просто установить его менеджером пакетов, если он еще не установлен.

    Как собрать его самостоятельно подробно расписано в документации http://www.boost.org/doc/libs/1_55_0/more/getting_started/index.html

  5. >остальное модуль find_boost сделает сам.
    я имел введу каким образом CMake находит библиотеку Boost? т.е. куда нужно прописать путь к источнику либы или этот путь прописывать ненужно?

    anton

    28 мая 14 10:52

  6. В PATH путь к корневой директории Boost, чтобы нашлись заголовочные файлы и путь к директории с собранными библиотеками (типа stage\lib) чтобы линковщик нашел что нужно.

  7. find_package, сори..

    anton

    28 мая 14 10:57

  8. >В PATH путь к корневой директории Boost, чтобы нашлись заголовочные файлы и путь к директории с собранными библиотеками (типа stage\lib) чтобы линковщик нашел что нужно.

    Я понял, спасибо Максим.

    anton

    28 мая 14 10:58

  9. т.е. это нам необходимо чтобы find искал именно статические и мульти либы из всех предлагаемых?

    set (Boost_USE_STATIC_LIBS ON)
    set (Boost_USE_MULTITHREADED ON)

    anton

    28 мая 14 11:00

  10. Да

Оставить комментарий