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?
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
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()
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()