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

时间:2017-05-22 14:57:02

标签: android boost cmake header

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

.. \ SRC \主\ CPP \升压\ RequiredHeader.hpp。

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

<击> .. \ SRC \主\ CPP \升压\升压\ AnotherHeader.hpp。

CMakeLists.txt (提升部分)

# ADD BOOST
message("Import Boost...\n")
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...\n")
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(myDependantLib ${Boost_LIBRARIES})
endif()

非常感谢您的帮助!

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

更新了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()

1 个答案:

答案 0 :(得分:2)

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

包含Boost-Header文件和库:

set(BOOST_ROOT C:/boost)

包含标题的路径&#34; boost / * .hpp&#34;和图书馆&#34; stage / lib&#34;或已输出编译文件的任何其他路径 然后,您需要指定include头和libs路径。在默认情况下,标题存储在与根相同的目录中(因为&#34; boost&#34;文件夹是自动搜索的)和libs,如&#34; stage / lib&#34;中所述。否则它应该是&#34;包括&#34;和&#34; lib&#34;您的输出目录,而boost版本必须与&#34; boost&#34;中的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( <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>

这适用于以下环境:

  • Android Studio 2.3.1 3.0
  • NDK 14.1
  • 提升1.56.0 1.64.0
  • Windows 10

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