这个问题与Why is this boost header file not included非常相似,但是这些提示并没有(似乎)解决了我的问题。
我有一个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)
在我的代码中包含一些boost标题,如下所示:
#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找到。即使Boost_INCLUDE_DIR似乎设置正确,看起来好像没有添加-I标志。
顺便说一句,我正在使用CMake 2.8.1。 我非常感谢任何关于这里出了什么问题的提示......
编辑: 我发现了这个问题。似乎我从我的档案深处抽取了我的标准CMakeLists.txt的一些古老版本。它必须是:
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
(注意非大写的“Boost”)...... 也许旧版本的CMake在这方面更加宽容,或者运气不好我只是选择从我的CMakeLists.txt版本开始,带有一个不修复的bug ..