[英]find_package(Boost) error when BOOST_INCLUDEDIR & BOOST_LIBRARYDIR are different
我正在尝试将Boost编译为共享库,并使它们成为我的跨平台 CMake项目的依赖项。
为此,我为win32,x64和Linux编译了boost,其中boost文件夹结构如下所示:
- boost_1_69_0/
- boost/
- stage/
- win32
- lib
- x64
- lib
- linux
- lib
然后我在做:
set(BOOST_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0)
set(BOOST_LIBRARYDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0/stage/win32)
find_package(Boost REQUIRED COMPONENTS filesystem)
得到:
CMake Error at C:/Program Files/CMake/share/cmake-3.13/Modules/FindBoost.cmake:2100 (message):
Unable to find the requested Boost libraries.
Boost version: 1.69.0
Boost include path: C:/bla/SW/cmake-template/external/boost_1_69_0
Could not find the following Boost libraries:
boost_filesystem
那是个错误吗?
如果我将lib
文件夹从win32
内部移动到其父目录,即:
- boost_1_69_0/
- boost/
- stage/
- lib
这是boost的b2构建东西的默认方式,然后一切正常。 但是,我不能为不同的平台使用不同的boost二进制文件。
编辑 :
使用set(Boost_DEBUG ON)
我发现我的Boost是在项目使用v140时使用Visual Studio v141工具集编译的,因此FindBoost
在寻找boost_filesystem-vc140-mt-x64-1_69
而不是boost_filesystem-vc140-mt-x64-1_69
。
我猜问题已经转移到要么找到一种方法来强制搜索v141,要么(更好)使用--layout=system
并找到一种方法来迫使它始终寻找boost_filesystem
。 有办法吗?
这里的问题是CMake搜索与某个命名方案匹配的boost库。 您的库与此不同,因为文件名中编码了一些选项。 您有两种选择:
b2
可执行文件时,再次使用--layout=system
标志再次编译boost。 这将创建具有标准名称(例如boost_filesystem.dll
和boost_filesystem.lib
库文件。 Boost_ARCHITECTURE="-x32"
Boost_COMPILER="-vc141"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.