Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio:CMake找不到Boost头文件_Android_Boost_Cmake_Header - Fatal编程技术网

Android Studio:CMake找不到Boost头文件

Android Studio:CMake找不到Boost头文件,android,boost,cmake,header,Android,Boost,Cmake,Header,我使用CMakeLists.txt将一个Boost头文件包含到我的测试项目中。我的some.cpp可以包含此头文件而不会出现任何错误,但我无法运行,因为头文件显然依赖于其他Boost头文件,并且找不到所需的文件。“我的文件”的位置位于cpp文件夹中,boost文件位于(C:\boost)子目录中: ..\src\main\cpp\boost\RequiredHeader.hpp 对于编译器正在查看的“RequiredHeader”中的包含文件: ..\src\main\cpp\boost\boo

我使用CMakeLists.txt将一个Boost头文件包含到我的测试项目中。我的some.cpp可以包含此头文件而不会出现任何错误,但我无法运行,因为头文件显然依赖于其他Boost头文件,并且找不到所需的文件。“我的文件”的位置位于cpp文件夹中,boost文件位于(C:\boost)子目录中:

..\src\main\cpp\boost\RequiredHeader.hpp

对于编译器正在查看的“RequiredHeader”中的包含文件:

..\src\main\cpp\boost\boost\AnotherHeader.hpp

CMakeLists.txt(增强部分)

非常感谢你的帮助

更新问题:
如何告诉CMake我的Boost头文件在哪里,因为它仍然找不到正确的位置,使用Boost_根集

更新的CMakeLists.txt

# ADD BOOST
message("Add boost...\n")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(BOOST_ROOT C:/boost_1_64_0)
set(BOOST_INCLUDE_DIR C:/boost_1_64_0/boost)

FIND_PACKAGE(Boost 1.64.0 COMPONENTS foreach REQUIRED)

if(Boost_FOUND)
    message("Boost found! Link libraries...\n")
    target_link_libraries(calculator LINK_PUBLIC ${Boost_LIBRARIES})
endif()
这篇文章帮助我解决了这个问题

包括Boost头文件和lib:

set(BOOST_ROOT C:/boost)
包含include头“boost/*.hpp”和库“stage/lib”的路径,或输出编译文件的任何其他路径。
然后需要指定include头和libs路径。在默认情况下,标题存储在与根目录相同的目录中(因为“boost”文件夹是自动搜索的),libs如“stage/lib”中所述。否则,它应该是输出目录的“include”和“lib”,而boost版本必须与“boost”文件夹中version.hpp中指定的版本相对应:

set(Boost\u INCLUDE\u DIR${Boost\u ROOT}/INCLUDE)
集合(Boost_LIBRARY_DIR${Boost_ROOT}/lib)
设置(Boost_版本1_64)
find_包(Boost${Boost_Version}组件系统线程)
如果(找到增压器)
目标目录(PUBLIC/PRIVATE${Boost\u include\u DIR})
#也可能包括系统路径的提升:
#include_目录(系统${Boost_include_DIR})
链接目录(${Boost\u LIBRARY\u DIR})
目标链接库(${Boost\u libraries})
endif()
然后我可以简单地:

#include <boost/random.hpp>
#include <boost/whatever.hpp>
#包括
#包括
这在以下环境中对我有效:

  • Android Studio 2.3.1和3.0
  • NDK 14.1
  • 升压1.56.0和1.64.0
  • 视窗10

如果需要进一步解释,请评论您的担忧

当搜索头文件时,编译器只查找您为其指定的路径(例外是系统范围的头文件,但绝对不是您的情况)。因此,只需不包括非索引目录。顺便说一句,如果
find\u packge(Boost)
应该为您设置Boost\u INCLUDE\u DIRS,那么为什么要设置Boost\u INCLUDE\u DIRS?我注释了包含的目录,但没有任何更改。我在find_包语句中添加了一个“REQUIRED”,以便在类似建议的情况下获得一条“漂亮的错误消息”。它向我抛出的错误消息是:
无法找到请求的Boost库。找不到Boost头文件。请将BOOST_ROOT设置为包含BOOST的根目录,或将BOOST_INCLUDEDIR设置为包含BOOST头的目录
我尝试设置这些目录,但没有成功…所以实际的问题是“找不到BOOST”,但并不是如您在问题中所述未能包含其头<代码>我尝试设置这些目录,但没有成功。-显示您尝试过的内容。不要用“RequiredHeader”替换实际的Boost头名称。感谢您迄今为止的帮助。我不认为不清楚我尝试了什么,很抱歉==>所以现在我更新了我的问题,标题并添加了新的CMake Boost Part仔细阅读错误消息:它谈论的是
Boost\u INCLUDEDIR
变量,而不是
Boost\u INCLUDE\u DIR
。通过将
Boost\u DEBUG
变量设置为1(或任何非假值),您可以获得有关搜索Boost的附加信息。通常,您不需要
target\u include\u目录
,因为头将由
target\u链接库
自动包含。对于仅标题库,请使用
target\u link\u目录(PUBLIC/PRIVATE Boost::Boost)
I不能使用您的行。由于无法识别单词“find_package”@Slim_user71169,我正在将CMake 3.6与Android Studio 3.0配合使用,并且构建工作完美无瑕。尝试检查您的CMake版本(因为find_包与AS无关)。您能否提供您收到的确切错误消息?
set( Boost_INCLUDE_DIR ${BOOST_ROOT}/include )
set( Boost_LIBRARY_DIR ${BOOST_ROOT}/lib )
set( Boost_Version 1_64 )

find_package( Boost ${Boost_Version} COMPONENTS system thread )
if( Boost_FOUND )
    target_include_directories( <your_lib> PUBLIC/PRIVATE ${Boost_INCLUDE_DIR} )  


    # its possible to include boost to system path too:  
    # include_directories( SYSTEM ${Boost_INCLUDE_DIR} )

    link_directories( ${Boost_LIBRARY_DIR} )
    target_link_libraries( <your_lib> ${Boost_LIBRARIES} )
endif()
#include <boost/random.hpp>
#include <boost/whatever.hpp>