gpt4 book ai didi

boost - CMake 在同一台机器上找到 Boost x86 和 x64

转载 作者:行者123 更新时间:2023-12-05 03:10:28 27 4
gpt4 key购买 nike

Boost 编译库对于 x86 和 x64 具有相同的名称。我的项目使用 Boost,我希望它在使用 CMake 为 x64 或 x86 目标编译时自动链接正确的 Boost 库

我的 CMakeFiles.txt 使用简单的代码

find_package(Boost REQUIRED
COMPONENTS
coroutine context thread filesystem program_options system
)

我的 Boost 是用 (MSVC2015) 构建的

b2 address-model=32 --build-type=minimal stage --stagedir stage
b2 address-model=64 --build-type=minimal stage --stagedir stage64

我也尝试过“安装”目标并将 boost 构建放入单独的文件夹中

我正在使用 (Windows) 构建我的项目

md build32
cd build32
cmake .. -G"Visual Studio 14 2015"
cmake --build .
cd ..

md build
cb build
cmake .. -G"Visual Studio 14 2015 Win64"
cmake --build .
cd ..

x86 目标构建成功,因为它的库(boost)位于 CMake 的 FindBoost 模块众所周知的“stage”文件夹中

但无法构建 x64 目标,因为 FindBoost 使用 Boost 的 x86 库来构建过程,并且不会尝试使用来自“stage64”的库并出现此错误:

D:\lib\boost_1_61_0\stage\lib\libboost_coroutine-vc140-mt-gd-1_61.lib : warning LNK4272: library machine type 'X86' conflicts with target machine type 'x64'

我的目标是在“Cmake”调用以构建我的项目时排除任何其他参数,我希望它根据我使用的 CMAKE 的哪个 -G 参数自动找到 x86 或 x64 的正确 boost 库

如何更改我的 CMakeFiles.txt 以使其自动找到正确的 boost 库?

Boost 版本 - 1.61、MSVC 2015、CMAKE - 3.6.2(最新且了解 boost 1.61)、Windows 7 x64

最佳答案

我猜你在项目的某处、缓存中或环境变量中设置了 BOOST_ROOT

sources 中查找,您可以通过设置 Boost_LIBRARY_DIR 来缩短查找过程。使用 CMAKE_SIZEOF_VOID_P检测架构:

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage64/lib
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage/lib
endif()

find_package(...)

${BOOST_ROOT} 可以替换为 $ENV{BOOST_ROOT}

关于boost - CMake 在同一台机器上找到 Boost x86 和 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com