我用CMake创建了一个包含Boost 1.55库的XCode项目,我遇到了一个我自己无法解决的问题。
包含
#include "boost/filesystem.hpp"
只适用于EIATHelper.cxx,但不适用于标题EIATHelper.h。在标题中,它表示“找不到文件”,因此构建失败。但仍然包含似乎有效,因为Xcode不会对“缺少的”filesystem.hpp中定义的已使用对象产生误解。
重要!当我将include和我的所有代码放入.cxx文件时,一切正常(构建/执行)。
我添加了一个截图,可能有助于更好地理解问题。 (当然我没有使用双#include):
该项目完全由CMake创建。
子文件夹标题中的CMakeLists.txt:
project(${PROJECT_NAME})
add_library(helper
${PROJECT_NAME}Helper.h
${PROJECT_NAME}Helper.cxx
)
set(BOOST_ROOT /Users/name/Libs/Boost/bin)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_DEBUG ON)
set(BOOST_INCLUDEDIR /Users/name/Libs/Boost/bin/include)
set(BOOST_LIBRARYDIR /Users/name/Libs/Boost/bin/lib)
find_package(Boost COMPONENTS
system
filesystem
log
log_setup
)
include_directories(${Boost_INCLUDE_DIRS})
if(NOT Boost_FOUND)
message("Boost was NOT found")
endif()
target_link_libraries(helper ${BOOST_LIBRARIES})
编辑:我用CMake创建了一个Eclipse CDT4项目,这里也有同样的问题。在EIATHelper.h中找不到头文件filsystem.hpp。所以我想我的项目设置有些问题,无论IDE是什么。
答案 0 :(得分:1)
只适用于EIATHelper.cxx,但不适用于标题EIATHelper.h
不,不是。 EIATHelper.cxx
包含EIATHelper.h
,因此"未找到标题"出现错误
首先在EIATHelper.h
并且是一种致命的错误 - 编译在没有处理EIATHelper.cxx
的情况下停止(因此没有报告EIATHelper.cxx
中的任何错误。)
我非常确定错误在于查找boost库。一些说明:
BOOST_INCLUDEDIR
和BOOST_LIBRARYDIR
是一个提示。如果您设置BOOST_ROOT
并且库位于标准路径(lib和include)中,则您不需要它们。EIATHelper.{h,cxx}
必须使用“提升”才能更好地使用REQUIRED
子选项
(您不需要检查Boost_FOUND
):
find_package(Boost REQUIRED系统文件系统log log_setup)
Boost_LIBRARIES
代替BOOST_LIBRARIES
BOOST_ROOT
变量,它不是用户友好的。至少做那样的事情:if(NOT BOOST_ROOT) set(BOOST_ROOT /some/default/path/to/boost) endif()