簡體   English   中英

在同一時間構建32位和64位庫以進行提升?

[英]Build 32 and 64 bit libraries for boost at sametime?

選項“--address-model = 32,64”是否可以構建32和64個庫,還是必須進行兩個單獨的構建?

這樣做:

b2 address-model=32,64

要么..

b2 address-model=32,64,32_64

在第一種情況下,根據工具集和平台支持,工作和生成32位和64位目標。 32,64和32 + 64通用目標(最有可能只在OSX上使用darwin工具集。而且“工作”我的意思是我只是在OSX上使用darwin工具集在我的Boost庫中嘗試過它。因此我懷疑你有你的語法錯誤,即不要使用“--name = values”,因為它們不是選項,而是使用“name = values”是需求規范。

文件說明(強調我的):

“顯式請求32 64位的代碼的生成。”

請注意,它沒有說“一個或多個”或“至少一個”,它表示......或者,這意味着我在閱讀它時的XOR並且您的經驗與之匹配。

允許值列表中的逗號僅用於分隔允許值集中的兩個項。

我最后做了以下事情:

  • 將32個lib / dll版本存儲在名為/ lib32的單獨文件夾中
  • 將64個lib / dll版本存儲在名為/ lib64的seaprate文件夾中

兩者都優選地在增強已經檢查的搜索路徑中,例如階段安裝文件夾。

然后我在標題下匯編搜索路徑后立即添加了這個塊(要編輯的FindBoost.cmake文件位於CMake安裝文件夾中的share / cmake-3.1 / Modules /文件夾下)

開始尋找升級庫


...

如果(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依賴路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM