Cmakeを使用するプロジェクトがあり、1つのターゲットがMSVCでのみビルドするように設定されています。
if (MSVC)
add_library(test SHARED source.cpp)
endif()
現在、もう1つの問題は、このターゲットがMSVC 32ビット専用に設計されていることです。では、ジェネレータがMSVC64であることをどのようにして検出し、このターゲットをスキップできますか?
CMake自体でも使用される-「64Bitではない」をチェックする方法がいくつかあります。
if(NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
...
endif()
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
...
endif()
if(NOT CMAKE_CL_64)
...
endif()
参考文献
64ビットアーキテクチャ向けに生成しているかどうかを確認する通常の方法は、 CMAKE_SIZEOF_VOID_P をテストすることです。
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
# 64 bits
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
# 32 bits
endif()
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()