2016-08-31 2 views
11

J'ai un projet qui utilise CMake, un objectif est fixé pour construire uniquement avec MSVC:Comment détecter si 64 bits MSVC avec cmake?

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

Maintenant, l'autre problème est que cet objectif est seulement conçu pour MSVC 32bit. Alors, comment puis-je détecter que le générateur est MSVC64 et ignorer cette cible?

Répondre

9

Il existe plusieurs façons - aussi utilisées par CMake lui-même - qui va vérifier pour "non 64Bit":

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

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

if(NOT CMAKE_CL_64) 
    ... 
endif() 

Références

+0

if (NOT "$ {CMAKE_GENERATOR}" MATCHES "(Win64 | IA64)") semble être ce que je suis après, je n'ai pas essayé le CMAKE_SIZEOF_VOID_P mais je suppose que cela devrait fonctionner aussi – paulm

+0

La première méthode ne fonctionne pas pour moi dans Qt Creator. 'CMAKE_GENERATOR' est égal à' NMake Makefiles'. Cependant, 'CMAKE_SIZEOF_VOID_P' semble très bien. – Melebius

14

La manière habituelle de vérifier si vous générez pour une architecture 64 bits est de tester CMAKE_SIZEOF_VOID_P:

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

J'ai fini par utiliser la méthode CMAKE_GENERATOR – paulm