同时构建32位和64位库以进行提升?

时间:2012-02-01 20:07:04

标签: c++ boost bjam boost-bjam

选项“--address-model = 32,64”是否会构建32和64个库,或者您是否需要进行两个单独的构建?

3 个答案:

答案 0 :(得分:21)

这样做的:

b2 address-model=32,64

或..

b2 address-model=32,64,32_64

在第一种情况下,根据工具集和平台支持,工作和生成32位和64位目标。 32,64和32 + 64通用目标(最有可能只在OSX上使用darwin工具集。而“工作”我的意思是我只是在OSX上用我的Boost库和{{1}进行了尝试因此我怀疑你的语法有误,即不要使用“--name = values”,因为它们不是选项,而是使用“name = values”是需求规范。

答案 1 :(得分:11)

文件说明(强调我的):

  

“明确请求 32位 64位代码生成。”

请注意,它没有说“一个或多个”或“至少一个”,它表示......或者,这意味着我在阅读它时的XOR,并且您的经验与之相符。

允许值列表中的逗号只是用于分隔允许值集中的两个项目。

答案 2 :(得分:6)

我最终做了以下事情:

  • 将32个lib / dll版本存储在名为/ lib32
  • 的单独文件夹中
  • 将64个lib / dll版本存储在名为/ lib64
  • 的seaprate文件夹中

两者最好都在提升已经检查的搜索路径中,例如 stage 安装文件夹。

然后我在标题下汇编搜索路径后立即添加了此块(要编辑的 FindBoost.cmake 文件位于 share / cmake-3.1 / Modules / 下您的CMake安装文件夹中的文件夹)

  

开始寻找升级库

     
     

...

     

如果(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位扩展标记。这将选择正确的目标库进行链接,您可以安全地为32或64目标构建重新生成任何其他依赖的cmake库(如CGAL),而无需重置boost依赖路径。