我用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