Этот вопрос очень похож на Почему этот файл заголовка надстройки не включен , но подсказки там (кажется) не решают мою проблему.
Я получил CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(jetorigin)
SET(Boost_ADDITIONAL_VERSIONS "1.43" "1.43.0" "1.44" "1.44.0" "1.45" "1.45.0")
SET(BOOST_ROOT "$ENV{HOME}/usr")
MESSAGE(STATUS "** Search Boost root: ${BOOST_ROOT}")
FIND_PACKAGE(Boost 1.43 COMPONENTS filesystem regex REQUIRED)
MESSAGE(STATUS "** Boost Include: ${Boost_INCLUDE_DIR}")
MESSAGE(STATUS "** Boost Libraries: ${Boost_LIBRARY_DIRS}")
MESSAGE(STATUS "** Boost Libraries: ${Boost_LIBRARIES}")
INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIR})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
ADD_SUBDIRECTORY(src)
И включите в свой код некоторые заголовки повышения, например:
#include <boost/regex.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
Теперь вывод из cmake выглядит нормально
-- ** Search Boost root: /home/oli/usr
-- Boost version: 1.43.0
-- Found the following Boost libraries:
-- filesystem
-- regex
-- ** Boost Include: /home/oli/usr/include
-- ** Boost Libraries: /home/oli/usr/lib
-- ** Boost Libraries: /home/oli/usr/lib/libboost_filesystem.so;/home/oli/usr/lib/libboost_regex.so
Но я получаю эту ошибку:
error: boost/regex.hpp: No such file or directory
(и аналогично для других включает). Полный вывод команды make VERBOSE = 1 можно найти здесь http://pastebin.ca/2039425. Похоже, что флаг -I не добавлен, хотя Boost_INCLUDE_DIR, кажется, установлен правильно.
Кстати, я использую CMake 2.8.1.
Я был бы очень признателен за любые намеки на то, что здесь происходит не так ..
EDIT:
Я нашел проблему. Кажется, я извлек какую-то древнюю версию моего стандартного CMakeLists.txt из глубины моих архивов. Это должно быть:
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
(обратите внимание на заглавные "Boost") ...
Возможно, более старые версии CMake были более терпимыми в этом отношении, или, к несчастью, я просто решил начать с версии моего CMakeLists.txt с нефиксированной ошибкой ..