Continuous Integration ·Programmierung

CMake – Unterscheidung zwischen 32-bit und 64-bit Maschine

Beim Kompilieren, Linken und Ausführung von Projekten bzw. Programmen muss man auch manchmal eine Unterscheidung durchführen, ob das System eine 32-bit-Architektur hat oder eine 64-bit. Auch in CMake kann man eine solche Abfrage einfügen. Die Abfrage sieht i.d.R. so aus:

if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
        # mach was für 32 bit
elseif ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
        # mach was für 64 bit
endif()

Ich habe testweise eine C++-Datei erstellt:

#include <iostream>
 
int main(int argc, char **argv)
{
#ifdef BUILD_WITH_32
        std::cout << "32-bit" << std::endl;
#elif BUILD_WITH_64
        std::cout << "64-bit" << std::endl;
#endif
        return 0;
}

Die dazugehörige CMakeLists.txt sieht in diesem Beispiel so aus:

cmake_minimum_required(VERSION 2.6)

set(SOURCES main.cpp)

if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
        add_definitions(-DBUILD_WITH_32)
elseif ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
        add_definitions(-DBUILD_WITH_64)
endif()

add_executable(hallo ${SOURCES})

Nun kann man das Beispiel mit den folgenden Linux-Befehlen

cmake .
make
./hallo

kompilieren und ausführen. Auf einer 32-bit Maschine sollte nun die Meldung 32-bit rauskommen und auf einer 64-bit Maschine sollte die Meldung 64-bit rauskommen.