2016-08-31 59 views
11

我有一個使用cmake的一個項目,一個目標被設定爲只與MSVC建設:如何檢測64位MSVC與cmake?

if (MSVC) 
    add_library(test SHARED source.cpp) 
endif() 

現在的另一個問題是,這個目標是專爲32位MSVC。那麼如何檢測生成器是MSVC64並跳過此目標?

回答

9

有幾種方法 - 也被CMake的本身 - 這將檢查 「沒有64位」:

if(NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)") 
    ... 
endif() 

if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") 
    ... 
endif() 

if(NOT CMAKE_CL_64) 
    ... 
endif() 

參考

+0

似乎是我後,我沒有嘗試CMAKE_SIZEOF_VOID_P,但我想這也應該工作 – paulm

+0

第一種方法不適合我在Qt Creator中工作。 'CMAKE_GENERATOR'等於'NMake Makefiles'。但是,'CMAKE_SIZEOF_VOID_P'看起來不錯。 – Melebius

14

通常的方法來檢查,如果你生成一個64位架構是測試CMAKE_SIZEOF_VOID_P

如果(NOT 「$ {} CMAKE_GENERATOR」 匹配 「(Win64平臺| IA64)」)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
    # 64 bits 
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    # 32 bits 
endif() 
+0

我結束了使用CMAKE_GENERATOR方法 – paulm