android cmake头文件,Android Studio:CMake没有找到Boost头文件

我使用CMakeLists.txt将Boost-Header文件包含到我的测试项目中。 我的some.cpp可以包含这个头没有任何错误,但我无法运行,因为头文件显然依赖于其他Boost头并且它没有找到所需的文件。 我的文件位于cpp文件夹中,boost文件位于(C: boost)子目录中:

.. SRC主 CPP提升 requiredHeader.hpp。

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

.. SRC主 CPP提升提升 AnotherHeader.hpp。行使>

CMakeLists.txt(Boost-part)

# ADD BOOST

message("Import Boost...

")

set(Boost_USE_STATIC_LIBS OFF)

set(Boost_USE_MULTITHREADED ON)

set(Boost_USE_STATIC_RUNTIME OFF)

set(Boost_INCLUDE_DIRS C:/boost_1_64_0/boost)

find_package(Boost 1.64.0)

if(Boost_FOUND)

message("Boost found! Link libraries...

")

include_directories(${Boost_INCLUDE_DIRS})

target_link_libraries(myDependantLib ${Boost_LIBRARIES})

endif()

非常感谢您的帮助!

更新的问题:

如何告诉CMake我的Boost头文件在哪里,因为它仍然找不到正确的位置,设置了BOOST_ROOT?

更新了CMakeLists.txt

# ADD BOOST

message("Add boost...

")

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...

")

target_link_libraries(calculator LINK_PUBLIC ${Boost_LIBRARIES})

endif()

当搜索头文件时,编译器只查找您为其指定的路径(例外是系统范围的头,但绝对不是你的情况)。所以,只是不要包含不需要的目录。顺便说一句,为什么你设置Boost_INCLUDE_DIRS,如果find_packge(Boost)应该为你设置它?

我注释掉了包含的目录但没有改变。我在find_package语句中添加了一个"REQUIRED",以获得一个"好的错误消息",如果在这里建议的话。它抛出的错误信息是:Unable to find the requested Boost libraries. Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers我尝试设置这些目录,但没有成功...

好吧,所以实际问题是"没有找到Boost",但不是没有像你在问题中所说的那样包含它的标题。 I tried setting those directories, but wasn't successful. - 显示您尝试过的内容。并且不要用"RequiredHeader"替换实际的Boost标头名称。

到目前为止,感谢您的帮助。我不认为我不知道我尝试了什么,抱歉==>所以现在我更新了我的问题,标题并添加了新的CMake Boost部分

仔细阅读错误消息:它涉及BOOST_INCLUDEDIR变量,而不是BOOST_INCLUDE_DIR。通过将Boost_DEBUG变量设置为1(或任何非假值),您可以获得有关搜索Boost的其他信息。

Boost_DEBUG是一个很好的暗示。我在这里上传了我上一次gradle同步的输出。既然它没有真正帮助我找到任何解决方案,我希望你会:)

Boost include目录应该是一个包含boost/config.hpp文件的目录(也就是说,include目录应该有boost子目录,而子目录应该包含名为config.hpp的文件)。检查BOOST_INCLUDEDIR是否与该目录完全相同。

非常感谢Tsyvarev!虽然我现在以另一种方式解决了我的问题而不是现在使用find_package,但这是帮助我找到答案的提示

为什么我在find_package(..)行中出错。 Android工作室可能没有"find_package"这个词

这篇文章帮助我解决了这个问题。

包括Boost-Header文件和库:

set(BOOST_ROOT C:/boost)

包含标题"boost / * .hpp"和库"stage / lib"的路径或已输出编译文件的任何其他路径。

然后,您需要指定include头和libs路径。在默认情况下,标题存储在与根相同的目录中(因为自动搜索"boost"文件夹)和libs,如"stage / lib"中所述。否则它应该是输出目录的"include"和"lib",而boost版本必须对应于"boost"文件夹中version.hpp中指定的版本:

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( 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( ${Boost_LIBRARIES} )

endif()

然后我能够简单地说:

#include

#include

这适用于以下环境:

Android Studio 2.3.1和3.0

NDK 14.1

提升1.56.0和1.64.0

Windows 10

如果需要进一步说明,请评论您的疑虑!

通常,您不需要target_include_directories,因为target_link_libraries会自动包含标题。 对于仅标头库,请使用target_link_directories( PUBLIC/PRIVATE Boost::boost)

我不能用你的台词。 AS无法识别"find_package"这个词

@ Slim_user71169我正在使用带有Android Studio 3.0的CMake 3.6,并且构建运行完美。 尝试检查你的CMake版本(因为find_package与AS无关)。 你能提供准确的错误信息吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值