web-dev-qa-db-fra.com

Comment détecter si MSVC 64 bits avec cmake?

J'ai un projet qui utilise cmake, une cible est définie pour ne construire qu'avec MSVC:

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

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

20
paulm

Il existe plusieurs façons - également utilisées par CMake lui-même - qui vérifieront "pas 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

19
Florian

La façon 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()
28
wasthishelpful

Sur les versions récentes de CMake/Visual Studio, le témoin est sélectionné avec CMAKE_GENERATOR_PLATFORM , qui peut être spécifié sur la ligne de commande avec -A option:

cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE=Release ..

Ainsi, sur la base de cette fonctionnalité, vous pouvez ensuite interroger la valeur à partir de CMakeLists.txt:

if(NOT ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win64"))
    ...
ENDIF()
0
Dmitry Mikushin