web-dev-qa-db-ja.com

cmakeで64ビットMSVCを検出する方法は?

Cmakeを使用するプロジェクトがあり、1つのターゲットがMSVCでのみビルドするように設定されています。

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

現在、もう1つの問題は、このターゲットがMSVC 32ビット専用に設計されていることです。では、ジェネレータがMSVC64であることをどのようにして検出し、このターゲットをスキップできますか?

20
paulm

CMake自体でも使用される-「64Bitではない」をチェックする方法がいくつかあります。

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

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

if(NOT CMAKE_CL_64)
   ...
endif()

参考文献

19
Florian

64ビットアーキテクチャ向けに生成しているかどうかを確認する通常の方法は、 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

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()
0
Dmitry Mikushin