c – 为什么这个boost头文件不包括在内
发布时间:2020-12-16 03:01:13 所属栏目:百科 来源:网络整理
导读:我正在Mac上用cmake构建我的c程序.编译器给我以下错误: error: boost/filesystem.hpp: No such file or directory 触发错误的行如下: #include "boost/filesystem.hpp" 要么 #include boost/filesystem.hpp 我使用以上哪项不会改变错误 但是在我的CMakeLis
我正在Mac上用cmake构建我的c程序.编译器给我以下错误:
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/include Boost_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 directory make[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_PATHn"); return EXIT_FAILURE; } fs::path path(args.front()); if(fs::exists(path)) printf("%s existsn",path.string().c_str()); else printf("%s doesn't existn",path.string().c_str()); return EXIT_SUCCESS; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |