Как обнаружить, если 64 бит MSVC с cmake?
У меня есть проект, который использует cmake, одна цель настроена только для сборки с помощью MSVC:
if (MSVC)
add_library(test SHARED source.cpp)
endif()
Теперь другая проблема заключается в том, что эта цель предназначена только для 32-битного MSVC. Итак, как я могу обнаружить, что генератор MSVC64 и пропустить эту цель?
Ответы
Ответ 1
Существует несколько способов - также используемый самим CMake - который будет проверять "not 64Bit":
if(NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
...
endif()
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
...
endif()
if(NOT CMAKE_CL_64)
...
endif()
Ссылки
Ответ 2
Обычный способ проверить, генерируете ли вы для архитектуры с 64 битами, - проверить CMAKE_SIZEOF_VOID_P:
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
# 64 bits
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
# 32 bits
endif()
Ответ 3
В последних версиях CMake/Visual Studio битность выбирается с помощью CMAKE_GENERATOR_PLATFORM, которая может быть указана в командной строке с опцией -A
:
cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE=Release ..
Итак, на основе этой функции вы можете запросить значение из CMakeLists.txt:
if(NOT ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win64"))
...
ENDIF()
Ответ 4
Необязательным решением является создание базы условий по имени используемого компилятора.
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")