Cmake beurteilt den Betriebssystemtyp des Terminals und die Sprache C/C++ beurteilt den Betriebssystemtyp

1. Beurteilungsmethode im C/C++-Code

1.1 Beurteilungsmethode der Desktop-Plattform

In C++ können Sie Präprozessormakros verwenden, um zu überprüfen, ob es sich bei dem System um ein UNIX-System handelt. Im Folgenden sind einige verfügbare Makros aufgeführt:
__unix__: True auf UNIX-Systemen.
__linux__: True auf Linux-Systemen.
_WIN32: True auf Windows-Systemen.
__APPLE__: Stimmt auf Mac-Systemen.
Wenn Sie beispielsweise überprüfen möchten, ob Ihr Code auf einem UNIX-System kompiliert wurde, können Sie Folgendes verwenden:

#if defined(__unix__) || defined(__linux__)  
    // UNIX系统代码  
#elif defined(_WIN32)  
    // WINDOWS 系统  
#elif defined(__APPLE__)
    // MAX 系统
endif

Dadurch werden Codeblöcke basierend auf Präprozessormakros ausgewählt. __unix__Wenn oder definiert ist __linux__, wird der erste Codeblock ausgewählt, andernfalls werden die restlichen Codeblöcke ausgewählt.

1.2 Beurteilungsmethode der mobilen Plattform

__ANDROID__: Stimmt im Android-Code.
__APPLE__und __arm__: In iOS müssen beide erfüllt sein

#ifdef __ANDROID__
        // Android 操作系统
#elif defined(__APPLE__) && defined(__arm__)  
    // iOS代码  
#else  
    // 非Android和iOS代码  
#endif

Auf dem Android-Betriebssystem __ANDROID__wird das Makro definiert, sodass __ANDROID__der Wert „true“ ist. Auf dem iOS-Betriebssystem __APPLE__ist das Makro definiert, und da iOS auf macOS basiert, __arm__ist das Makro auch definiert, sodass __APPLE__ &&  __arm__als „true“ ausgewertet wird. Wenn der Code auf einem anderen Betriebssystem als Android und iOS ausgeführt wird, werden diese Makros nicht definiert, sodass der Wert von __ANDROID__und __APPLE__ &&  __arm__falsch ist.

Bitte beachten Sie, dass mit dieser Methode nur festgestellt werden kann, ob es sich um ein Android- oder iOS-Betriebssystem handelt, nicht jedoch die spezifische Version oder der Typ des Betriebssystems. Wenn Sie detailliertere Informationen zum Betriebssystem benötigen, müssen Sie möglicherweise andere Methoden oder Bibliotheken verwenden, um Systeminformationen zu erhalten.

2. Bestimmen Sie den Betriebssystemtyp in CMakeLists.txt

2.1 Beurteilung der Desktop-Plattform

  • Methode eins
    if(WIN32)
        # Windows 系统
    elseif(OSX)
        # Mac 系统
    elseif(UNIX)
        # Unix系统
    else()	
        # 其他系统
    endif()
  • Weg zwei
cmake_minimum_required(VERSION 3.10)  
  
project(DemoProject)  
  
include(CMakeForceCompiler)  
CMakeForceCompiler(  
    gcc  
    CMAKE_C_FLAGS_INIT "-std=c11"  
    CMAKE_CXX_FLAGS_INIT "-std=c++11"  
)  
  
if(CMAKE_SYSTEM_NAME MATCHES "Linux")  
    message(STATUS "Running on Linux操作系统")  
    # 在这里添加适用于Linux的操作系统的特定配置  
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")  
    message(STATUS "Running on Windows操作系统")  
    # 在这里添加适用于Windows的操作系统的特定配置  
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")  
    message(STATUS "Running on macOS/iOS操作系统")  
    # 在这里添加适用于macOS/iOS的操作系统的特定配置  
else()  
    message(STATUS "Running on an unknown operating system")  
    # 在这里添加适用于其他操作系统的通用配置  
endif()

Im obigen Code ist CMAKE_SYSTEM_NAME eine vordefinierte Variable, die den Namen des aktuellen Betriebssystems enthält. Dann verwenden wir if- und elseif-Anweisungen, um den Namen des Betriebssystems zu überprüfen und den entsprechenden Codeblock basierend auf dem Ergebnis der Übereinstimmung auszuführen. Sie können innerhalb jedes Codeblocks spezifische Konfigurationen oder Anweisungen hinzufügen, die für bestimmte Betriebssysteme gelten.

Beachten Sie, dass dies nur ein einfaches Beispiel ist, um zu veranschaulichen, wie in der Datei CMakeLists.txt Betriebssystembeurteilungen vorgenommen werden. Die spezifischen Beurteilungsbedingungen und Konfiguration können je nach Ihren Projektanforderungen variieren.

2.2 Beurteilung der mobilen Plattform

Für die mobile Beurteilung übergebe ich normalerweise die CPU-Architektur über die Option cmake -D und beurteile sie dann in CMakeLists.txt

cmake -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a .

Supongo que te gusta

Origin blog.csdn.net/CHNIM/article/details/132270276
Recomendado
Clasificación