我使用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()
答案 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>
这适用于以下环境:
如果需要进一步说明,请评论您的疑虑!