2016-08-31 15 views
11

Mam projekt, który korzysta z cmake, jeden cel ustawiony jest tylko budować z MSVC:Jak wykryć, czy 64-bitowy MSVC z cmake?

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

Teraz druga kwestia jest taka, że ​​cel ten jest przeznaczony tylko dla MSVC 32bit. Jak więc wykryć, że generator jest MSVC64 i pominąć ten cel?

Odpowiedz

9

Istnieje kilka sposobów - także wykorzystywane przez samą CMake - który będzie sprawdzał "nie 64bit":

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

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

if(NOT CMAKE_CL_64) 
    ... 
endif() 

Referencje

+0

jeśli (nie "$ {CMAKE_GENERATOR}" dopasowuje "(Win64 | IA64)") wydaje się być tym, co robię, nie próbowałem CMAKE_SIZEOF_VOID_P ale myślę, że to powinno działać też – paulm

+0

Pierwsza metoda nie działa dla mnie w Qt Creator. 'CMAKE_GENERATOR' jest równy' NMake Makefiles'. Jednak "CMAKE_SIZEOF_VOID_P" wygląda dobrze. – Melebius

14

Zwykłym sposobem, aby sprawdzić, czy jesteś generowania przez 64 bity architektury jest przetestowanie CMAKE_SIZEOF_VOID_P:

if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
    # 64 bits 
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 
    # 32 bits 
endif() 
+0

Skończyło się na zastosowaniu metody CMAKE_GENERATOR – paulm