2016-09-26 77 views
2

Boost編譯的庫對於x86和x64具有相同的名稱。我的項目使用升壓,我想它會自動鏈接通過CMake編譯針對x64或x86目標時,正確的Boost庫CMake find在同一臺機器上同時升級x86和x64

我CMakeFiles.txt採用簡單的代碼

find_package(Boost REQUIRED 
    COMPONENTS 
    coroutine context thread filesystem program_options system 
) 

我升壓是建立與(MSVC2015)

b2 address-model=32 --build-type=minimal stage --stagedir stage 
b2 address-model=64 --build-type=minimal stage --stagedir stage64 

我也試圖「安裝」的目標,並把推動構建成單獨的文件夾

我建立我的項目,(視窗)

md build32 
cd build32 
cmake .. -G"Visual Studio 14 2015" 
cmake --build . 
cd .. 

md build 
cb build 
cmake .. -G"Visual Studio 14 2015 Win64" 
cmake --build . 
cd .. 

x86的目標是打造全成,因爲它的庫(升壓)正在鋪設中是衆所周知的CMake的FindBoost模塊

但64目標着「舞臺」文件夾因爲FindBoost使用Boost的x86庫進行構建過程,並且不嘗試使用來自「stage64」的庫,並出現此錯誤:

D:\lib\boost_1_61_0\stage\lib\libboost_coroutine-vc140-mt-gd-1_61.lib : warning LNK4272: library machine type 'X86' conflicts with target machine type 'x64'

我的目標是在「CMake的」以exlude任何額外PARAMS呼籲建立我的項目,我希望它自動爲x86或x64取決於正確的升壓庫我使用

如何在其上的CMake的-G PARAM我可以更改我的CMakeFiles.txt以使其自動找到正確的提升庫嗎?

加速版本 - 1.61,MSVC 2015年,CMake的 - 3.6.2(最新的,並且具有約1.61提升知識),Windows 7的64位

+1

當爲x86_64構建項目時,您可以將CMake變量'BOOST_ROOT'設置爲approprite目錄('D:\ lib \ boost_1_61_0 \ stage64')。 – Tsyvarev

+0

@Tsyvarev,不幸的是,boost階段目錄不包含僅包含libs。所以我需要將BOOST_ROOT設置爲d:\ lib \ boost_1_61_0。但是,即使我將-DBOOST_LIBRARYDIR添加到d:\ lib \ boost_1_61_0 \ stage64 \ lib - 當我構建x64時,仍然使用不正確的d:\ lib \ boost_1_61_0 \ stage(x86)作爲庫。它以某種方式硬編碼在CMake的findboost模塊內 – Evgeniy

+1

您可以嘗試手動將x86 libs放在'BOOST_ROOT/lib32-msvc-14.0 /'和x64的'BOOST_ROOT/lib64-msvc-14.0 /'中並再次檢查嗎? – llonesmiz

回答

2

我猜你有BOOST_ROOT某處設置你的poject,在緩存中,或在一個環境變量中。

sources看,你可以通過設置Boost_LIBRARY_DIR短路查找過程。使用CMAKE_SIZEOF_VOID_P檢測架構:

if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
    set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage64/lib 
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    set(Boost_LIBRARY_DIR ${BOOST_ROOT}/stage/lib 
endif() 

find_package(...) 

${BOOST_ROOT}可以與$ENV{BOOST_ROOT}代替。

+0

Boost_LIBRARY_DIR是FindBoost模塊的結果,它不會將它看作參數。它看起來到BOOST_LIBRARYDIR參數。但即使我用它 - 沒有運氣。如果我有「階段」目錄 - 在任何情況下都會使用庫,我不能改變它 – Evgeniy

+0

'Boost_LIBRARY_DIR'是一個參數。看看[這裏](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake#L150)和[這裏](https://github.com/Kitware/CMake/blob/master /Modules/FindBoost.cmake#L912)。它用於設置'Boost_LIBRARY_DIR_RELEASE'的默認值。看看[這裏](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake#L1349),它會在'BOOST_LIBRARYDIR'和'BOOST_ROOT'之前使用 – wasthishelpful

+0

對不起,我的第一條評論 - 你是完全正確的。清理緩存後,我再次重新測試它,並且它可以正常工作。謝謝! – Evgeniy

相關問題