XCode #include bug - 在头文件中找不到但在cxx中找不到

时间:2014-05-20 08:35:57

标签: boost cmake

我用CMake创建了一个包含Boost 1.55库的XCode项目,我遇到了一个我自己无法解决的问题。

包含

#include "boost/filesystem.hpp" 

只适用于EIATHelper.cxx,但不适用于标题EIATHelper.h。在标题中,它表示“找不到文件”,因此构建失败。但仍然包含似乎有效,因为Xcode不会对“缺少的”filesystem.hpp中定义的已使用对象产生误解。

重要!当我将include和我的所有代码放入.cxx文件时,一切正常(构建/执行)。

我添加了一个截图,可能有助于更好地理解问题。 (当然我没有使用双#include):

xcode error message

该项目完全由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是什么。

1 个答案:

答案 0 :(得分:1)

  

只适用于EIATHelper.cxx,但不适用于标题EIATHelper.h

不,不是。 EIATHelper.cxx包含EIATHelper.h,因此"未找到标题"出现错误 首先在EIATHelper.h并且是一种致命的错误 - 编译在没有处理EIATHelper.cxx的情况下停止(因此没有报告EIATHelper.cxx中的任何错误。)

我非常确定错误在于查找boost库。一些说明:

  • BOOST_INCLUDEDIRBOOST_LIBRARYDIR是一个提示。如果您设置BOOST_ROOT并且库位于标准路径(lib和include)中,则您不需要它们。
  • EIATHelper.{h,cxx}必须使用“提升”才能更好地使用REQUIRED子选项 (您不需要检查Boost_FOUND):

      

    find_package(Boost REQUIRED系统文件系统log log_setup)

  •   
  • CMake变量区分大小写,请使用Boost_LIBRARIES代替BOOST_LIBRARIES
  •   
  • 不要硬编码BOOST_ROOT变量,它不是用户友好的。至少做那样的事情:
  •   
  
if(NOT BOOST_ROOT)
  set(BOOST_ROOT /some/default/path/to/boost)
endif()