Cmake找不到boost库;但是includeir和librarydir已经设定好了

时间:2016-09-22 15:28:00

标签: c++ boost cmake

我是C / C ++,Cmake和Boost的新手;我已经阅读了其他人的每个帖子都遇到了同样的问题,我无法理解。

编辑:正如评论中所解释的那样,我已经阅读了another similar post,我已经在接受的解决方案中提出了建议(即使用COMPONENTS libraryNameset(Boost_USE_STATIC_LIBS OFF)。实际上,将Boost_USE_STATIC_LIBS设置为OFF会从argn参数中的库名称中删除“lib”前缀。我似乎需要该前缀..

我使用bjam为Android构建了Boost,希望我已经完成了所有操作,我使用了这个命令:

./b2 install include=/home/myUser/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/include include=/home/myUser/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include include=/home/myUser/android-ndk-r12b/platforms/android-19/arch-arm/usr/include toolset=gcc-arm target-os=android --prefix=/home/myUser/boost_build --with-system --with-random --with-date_time -sNO_BZIP2=1 link=static runtime-link=shared threading=multi

我最终得到了这个文件夹结构:

/home/myUser/boost_build/
    - include/
        -boost/
            - # a lot of folders and .hpp files
    - lib/
        - libboost_date_time.a
        - libboost_random.a
        - libboost_system.a

然后我启动Cmake以使用此命令编译我的项目:

cmake -DBOOST_ROOT=/home/myUser/boost_build -DBOOST_INCLUDEDIR=/home/myUser/boost_build/include -DBOOST_LIBRARYDIR=/home/myUser/boost_build/lib -DBOOST_VER:STRING=1.61.0 ./

这是CMakeList.txt的重要部分:

option(BUILD_SHARED_LIBS "Build the shared library" OFF)
#option(Boost_USE_STATIC_LIBS "Use Boost static version" ON)
set(Boost_USE_STATIC_LIBS ON)
#tried both of the versions above, I don't even know the difference

set(BOOST_VER "1.61.0")
set(Boost_VERSION 106100)

set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
set(Boost_FIND_QUIETLY 0 )
set(Boost_DEBUG 1)

find_package(Boost ${BOOST_VER} REQUIRED COMPONENTS system date_time random) 

最后,我最终得到了这个错误:

-- [ /usr/share/cmake-3.5/Modules/FindBoost.cmake:1558 ] Boost_FOUND = 1
# e.d.: Notice that Boost_FOUND = 1. Reading through the FindBoost code, I understand that this means that he found the include directory with the header files.
CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1719 (message):
  # e.d.: don't mind the line numbers in the FindBoost.cmake files... I added a lot of messages around, to debug

  Unable to find the requested Boost libraries.

  Boost version: 1.61.0

  Boost include path: /home/myUser/boost_build/include

  Could not find the following static Boost libraries:

          boost_system
          boost_date_time
          boost_random

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.
Call Stack (most recent call first):
  CMakeLists.txt:48 (find_package)

如果我尝试在FindBoost.cmake中打印find_library参数:

message(STATUS "looking for library: var: ${var} , dollarvar: ${${var}}, argn: ${ARGN}")
find_library(${var} ${ARGN})
message(STATUS "dollarvar: ${${var}}" )

我明白了:

-- looking for library: var: Boost_SYSTEM_LIBRARY_RELEASE , dollarvar: , argn: NAMES;libboost_system-ghs-mt-1_61;libboost_system-ghs-mt;libboost_system-mt-1_61;libboost_system-mt;libboost_system;HINTS;/home/myUser/boost_build/lib;/home/myUser/boost_build/lib;/home/myUser/boost_build/stage/lib;/home/myUser/boost_build/include/lib;/home/myUser/boost_build/include/../lib;/home/myUser/boost_build/include/../lib/;/home/myUser/boost_build/include/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib;NAMES_PER_DIR;DOC;Boost system library (release)
-- dollarvar: Boost_SYSTEM_LIBRARY_RELEASE-NOTFOUND

EDIT2:我试图将我的boost_build目录和我的项目目录从Linux复制到Windows,在那里我也安装了CMake,并且非常烦恼......在windows下工作的cmake。不幸的是,windows下的cmake会生成一些Visual Studio Project文件,而不是makefile。现在我想知道为什么Ubuntu 16.04下的cmake版本3.5.1不起作用,而Windows 7下的cmake版本3.6.2也不行。

0 个答案:

没有答案