error: boost/filesystem.hpp: No such file or directory
触发错误的行如下:
#include "boost/filesystem.hpp"
要么
#include <boost/filesystem.hpp>
我使用以上哪项不会改变错误
但是在我的CMakeLists.txt中,我将以下列方式包含boost头:
FIND_PACKAGE(Boost) MESSAGE("Boost information:") MESSAGE(" Boost_INCLUDE_Dirs: ${Boost_INCLUDE_Dirs}") MESSAGE(" Boost_liBRARIES: ${Boost_liBRARIES}") MESSAGE(" Boost_liBRARY_Dirs: ${Boost_liBRARY_Dirs}") INCLUDE_DIRECTORIES(${Boost_INCLUDE_Dirs})link_DIRECTORIES(${Boost_liBRARY_Dirs})
在cmake过程中,Boost包含dirs已填充“/ opt / local / include /”,此文件夹包含一个包含filesystem.hpp的文件夹boost
Boost在生成Makefile时给出以下消息,我只复制boost部分:
-- Boost version: 1.38.0-- Found the following Boost librarIEs:Boost information:Boost_INCLUDE_Dirs: /opt/local/includeBoost_liBRARIES: Boost_liBRARY_Dirs: /opt/local/lib-- Configuring done
当运行make VERBOSE = 1此行包含错误:
cd /Users/janusz/documents/workspace/ImageMarker/DeBUG/src && /usr/bin/c++ -O3 -Wall -Wno-deprecated -g -verbose -I/Users/janusz/documents/workspace/ImageMarker/src/. -o CMakefiles/ImageMarker.dir/FaceRecognizer.cpp.o -c /Users/janusz/documents/workspace/ImageMarker/src/FaceRecognizer.cpp/Users/janusz/documents/workspace/ImageMarker/src/FaceRecognizer.cpp:8:32: error: boost/filesystem.hpp: No such file or directorymake[2]: *** [src/CMakefiles/ImageMarker.dir/FaceRecognizer.cpp.o] Error 1
你明白为什么编译器没有选择/ opt / local / include目录?
如果您需要更多信息,我很乐意提供
解决方法 首先使用FIND_PACKAGE(Boost required)
而不是
FIND_PACKAGE(Boost)
这样,在开始任何编译之前,如果没有找到它,cmake会给你一个很好的错误消息.如果没有将环境变量BOOST_ROOT设置为/ opt / local(这是安装前缀).
此外,您将不得不链接到文件系统库,所以你想要
FIND_PACKAGE(Boost COMPONENTS filesystem required)
供以后使用
target_link_librarIEs(mytarget ${Boost_fileSYstem_liBRARY})
输入
cmake --help-module FindBoost
在shell中获取cmake安装中的Boost查找模块的文档.
PS:一个例子
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)project(Foo)find_package(Boost COMPONENTS filesystem required)include_directorIEs(${Boost_INCLUDE_Dirs})add_executable(foo main.cpp)target_link_librarIEs(foo ${Boost_fileSYstem_liBRARY})
main.cpp中
#include <boost/filesystem.hpp>#include <vector>#include <string>#include <cstdio>#include <cstddef>namespace fs = boost::filesystem;using namespace std;int main(int argc,char** argv){ vector<string> args(argv+1,argv+argc); if(args.empty()) { printf("usage: ./foo SOME_PATH\n"); return EXIT_FAILURE; } fs::path path(args.front()); if(fs::exists(path)) printf("%s exists\n",path.string().c_str()); else printf("%s doesn't exist\n",path.string().c_str()); return EXIT_SUCCESS;}总结
以上是内存溢出为你收集整理的c – 为什么这个boost头文件不包括在内全部内容,希望文章能够帮你解决c – 为什么这个boost头文件不包括在内所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)