我用CMake创建了一个包含Boost 1.55库的XCode项目,并且遇到了一个我自己无法解决的问题。XCode #include bug - 在头文件中找不到,但在cxx中
的包括
#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})
编辑:我创建了一个Eclipse的CDT4项目与CMake的,同样的问题在这里。在EIATHelper.h中找不到头文件filsystem.hpp。所以我猜想我的项目设置有些问题,无论IDE如何。
什么是 “/用户/名/利布斯/升压/斌/包括”?你确定Boost标题在那吗? –
是的,我相信。就像我所说的那样,只要我将代码放在EIATHelper.cxx文件中,#include和boost中的所有代码都可以工作!在将我的方法的包含和原型移动到EIATHelpber.h后,它说,找不到“boost/filesystem.hpp”,但仍然找到filesystem.hpp中定义的类型...所以也许它只是一个问题与Xcode? – user3655592
请注意,编译器不直接编译头文件。它们通过源文件间接编译,通过'#inc'将它们引入。因此,如果你在头文件中看到编译错误,你首先需要找出哪个源文件产生错误。哪个'.cxx'文件在你的项目中包含'EIATHelper.h'?你需要确保他们的_all_在他们的包含路径中有Boost目录。 – ComicSansMS