cmake判断端操作系统类型,C/C++语言判断操作系统类型

一. C/C++代码中判断方法

1.1 桌面平台判断方法

在C++中,您可以使用预处理器宏来检查系统是否是UNIX系统。下面是一些可用的宏:
__unix__:在UNIX系统中为真。
__linux__:在Linux系统中为真。
_WIN32:在Windows系统中为真。
__APPLE__: 在mac系统中为真。
例如,如果您想检查是否在UNIX系统上编译代码,可以使用以下代码:

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

这将根据预处理器宏来选择代码块。如果定义了__unix____linux__,则选择第一个代码块,否则选择余下代码块。

1.2 移动平台判断方法

__ANDROID__:在android代码中为真 。
__APPLE____arm__:在ios中需要同时满足

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

在Android操作系统上,__ANDROID__宏会被定义,因此__ANDROID__的值会为真。在iOS操作系统上,__APPLE__宏会被定义,并且由于iOS基于macOS,__arm__宏也会被定义,因此__APPLE__ && __arm__的值会为真。如果代码在除Android和iOS之外的其他操作系统上运行,这些宏不会被定义,因此__ANDROID____APPLE__ && __arm__的值会为假。

请注意,这种方法只能判断是否是Android或iOS操作系统,无法判断具体的操作系统版本或类型。如果你需要更详细的操作系统信息,可能需要使用其他方法或库来获取系统信息。

二. 在CMakeLists.txt中判断操作系统类型

2.1 桌面平台判断

  • 方式一
    if(WIN32)
        # Windows 系统
    elseif(OSX)
        # Mac 系统
    elseif(UNIX)
        # Unix系统
    else()	
        # 其他系统
    endif()
  • 方式二
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()

在上述代码中,CMAKE_SYSTEM_NAME是一个预定义的变量,它包含了当前操作系统的名称。然后,我们使用if和elseif语句来检查操作系统名称,并根据匹配的结果执行相应的代码块。你可以在每个代码块中添加适用于特定操作系统的特定配置或指令。

请注意,这只是一个简单的示例,用于演示如何在CMakeLists.txt文件中进行操作系统判断。具体的判断条件和配置可能因你的项目需求而有所不同。

2.2 移动平台判断

移动端判断,我一般是通过cmake -D选项把cpu架构传进去,然后再CMakeLists.txt判断

cmake -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a .

猜你喜欢

转载自blog.csdn.net/CHNIM/article/details/132270276