选项“--address-model=32,64”会构建32位和64位库吗?还是必须进行两次单独的构建?
做:
b2 address-model=32,64
或者...
b2 address-model=32,64,32_64
根据工具集和平台支持的不同,第一种情况下可以处理并生成32位和64位目标。在OSX上,使用"darwin"工具集可能会生成32位、64位和32 + 64通用目标(很可能只有这种情况)。通过"工作",我是指我在OSX上使用"darwin"工具集尝试了我的Boost库,因此我怀疑您的语法有误,即不要使用"--name=values"作为选项,而是使用"name=values"作为需求规格。请注意,它并没有说“一个或多个”或“至少一个”,而是说要么是......要么是,这意味着在我的解读中是异或,您的经验证实了这一点。“显式请求生成32位或64位代码。”
两者最好都在boost已经检查的搜索路径中,例如stage或安装文件夹。
然后,在头部的搜索路径被组装完成之后,我添加了以下代码块(需要编辑FindBoost.cmake文件,该文件位于CMake安装文件夹下的share/cmake-3.1/Modules/文件夹中):
开始查找boost库
...
if(Boost_LIBRARY_DIR)
...
endif()
#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位扩展标记。这将选择正确的目标库进行链接,您可以安全地重新生成任何其他依赖于cmake库(如CGAL)的32位或64位目标构建,而无需重置boost依赖路径。
architecture=x86
。 - Mazyod