选项“--address-model=32,64”会构建 32 和 64 库,还是必须进行两个单独的构建?
3 回答
正在做:
b2 address-model=32,64
或者..
b2 address-model=32,64,32_64
在第一种情况下,根据工具集和平台支持工作和生产 32 位和 64 位目标。以及 32、64 和 32+64 通用目标(很可能仅在 OSX 上使用darwin
工具集。而“工作”是指我刚刚在 OSX 上使用我的 Boost 库和darwin
工具集进行了尝试。因此我怀疑你有你的语法错误,即不要使用“--name=values”,因为它们不是选项,而是使用“name=values”是需求规范。
文档状态(强调我的):
“明确要求生成32 位或64 位代码。”
请注意,它没有说“一个或多个”或“至少一个”,它说...或者,这意味着在我的阅读中异或,您的经验与此相符。
允许值列表中的逗号只是为了分隔允许值集中的两项。
我最终做了以下事情:
- 将 32 个 lib/dll 构建存储在名为 /lib32 的单独文件夹中
- 将 64 个 lib/dll 构建存储在名为 /lib64 的 seaprate 文件夹中
两者都最好位于 boost 已经在检查的搜索路径中,例如阶段或安装文件夹。
然后我在标题下组装搜索路径后立即添加了此块(要编辑的FindBoost.cmake文件位于 CMake 安装文件夹中的share/cmake-3.1/Modules/文件夹下)
开始寻找 boost 库
...
如果(Boost_LIBRARY_DIR)
...
万一()
#generate 32 and 64 bit paths
if(WIN32)
if(CMAKE_CL_64)
#message("Finding BOOST on windows platform (64 bit)")
SET(BOOST_libdir_suffix_gen "64")
else()
#message("Finding BOOST on windows platform (32 bit)")
SET(BOOST_libdir_suffix_gen "32")
endif()
list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS "")
foreach(SEARCH_DIR_NOPLATFORM ${_boost_LIBRARY_SEARCH_DIRS})
list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS ${SEARCH_DIR_NOPLATFORM}${BOOST_libdir_suffix_gen})
endforeach()
foreach(SEARCH_DIR_PLATFORM ${_boost_LIBRARY_SEARCH_DIRS_PLATFORMS})
list (APPEND _boost_LIBRARY_SEARCH_DIRS ${SEARCH_DIR_PLATFORM})
endforeach()
else()
# no generation required (?)
endif()
它将所有现有的 lib 目录重新附加到库的 boost 搜索路径,后缀为 64 或 32 位扩展标记。这会选择正确的目标库进行链接,并且您可以安全地为 32 或 64 目标构建重新生成任何其他依赖的 cmake 库(如 CGAL),而无需重置 boost 依赖路径。