2012-02-01 97 views
26

選項「--address-model = 32,64」是否會構建32和64庫,還是你必須做兩個獨立的構建?同時建立32位和64位庫以提升?

+1

**對於那些編譯i386 Mac OS **的人而且在這裏偶然發現,它並沒有工作,那麼你就處於自殺的邊緣(像我一樣),也加上這個標誌:'architecture = x86' – Mazyod 2013-06-19 00:41:02

+1

我有類似的問題。我可以構建boost 32和64位(下面的答案中的32_64建議不適用於版本爲1.57.0的Windows),並將它們存儲在不同的lib目錄中,但是當引用這些庫時,組織的最佳或建議方法是什麼他們?我希望能夠構建32位和64項目,而無需在環境變量之間進行切換(例如,當使用cmake時) – StarShine 2015-04-02 12:51:20

回答

18

這樣做:

b2 address-model=32,64 

或..

b2 address-model=32,64,32_64 

工作和生產,依賴於工具集和平臺支持,在第一種情況下32個和64位的目標。和32,64和32 + 64通用目標(很可能只在OSX上使用darwin工具集)。「作品」我的意思是我剛剛用OSX上的Boost庫與darwin工具集一起嘗試了它。你的語法錯誤,因爲他們沒有選擇,即不使用「--name =價值」,而是用「名稱=值」是有要求的規格

+2

感謝您的語法澄清!也許我很挑剔,但是當語法不正確時,不應該給出一個錯誤(至少警告)?我猜這個故事的寓意是用b2小心! – PopcornKing 2012-02-03 05:29:13

+0

從b2實現的POV中,語法不正確並不容易。它看到了一個正確的語法選項(任何以「 - 」開頭的,不能識別的),它被傳遞給Jamfiles,它們都以模塊化的方式查看選項,並決定它們不處理。沒有地方可以決定這個選項是無效的,也就是說,它最終被忽略了,這是b2 CLI不是一個封閉的語法集合的效果 – GrafikRobot 2012-02-03 13:31:37

+18

我想你會遇到這個問題因爲不幸的是,32位和64位庫的名稱是相同的,所以需要運行b2兩次,例如,「--stagedir = stage32 address-model = 32」,一次使用「 --stagedir = stage64 address-model = 64「。 – mheyman 2013-03-13 16:49:35

9

的文檔狀態(重點煤礦):

「顯式請求 32位 64位代碼生成」。

請注意,它不會說「一個或多個」或「至少一個」,它表示...或者,這意味着XOR在我的閱讀中,並且您的體驗與此相匹配。

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

+0

該文檔還指出:「只有當特徵具有固定的一組值時,逗號才具有特殊含義,因此 bjam include = static,共享 未被特別處理。「對於地址模型,32和64似乎是固定的。感謝您的迴應。 – PopcornKing 2012-02-01 21:42:02

+1

@PopcornKing - 我認爲「或者......或者」對特定標誌的評論取代了任何一般性評論,否則適用 – Flexo 2012-02-01 21:48:05

6

最後我做了以下內容:

  • 商店32的lib/DLL建立在被叫/ LIB32
  • 商店64的lib/DLL建立在被叫/ lib64下
  • 一個seaprate文件夾中的單獨的文件夾

無論在那個提升是已經檢查,如階段安裝文件夾的搜索路徑是優選。

然後我說這個塊中的搜索路徑的報頭(在FindBoost.cmake文件編輯正在份額/ cmake的-3.1 /模塊/文件夾中的CMake安裝文件夾)

下組裝後右

開始尋找Boost庫


...

如果(Boost_LIBRAR Y_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目錄重新追加到圖書館升壓搜索路徑中,與64位或32位擴展標籤後綴。這會爲鏈接選擇正確的目標庫,並且可以安全地爲32或64目標版本重新生成任何其他依賴cmake庫(如CGAL),而無需重置boost依賴路徑。