一. 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 .