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

news/2025/2/11 5:39:38/

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

http://www.ppmy.cn/news/1032129.html

相关文章

创建一个 React+Typescript 项目

接下来 我们来一起探索一下用TypeScript 来编写react 这也是一个非常好的趋势,目前也非常多人使用 那么 我们就先从创建项目开始 首先 我们先找一个 或者 之前创建一个目录 用来放我们的项目 然后 在这个目录下直接输入 例如 这里 我想创建一个叫 tsReApp 的项目…

图像变形之移动最小二乘算法(MLS)

基本原理 基于移动最小二乘的图像变形是通过一组源控制点和目标控制点来控制变形,对于每一个待求变形后位置的点而言,根据预设的形变类型(如仿射变换、相似变换、刚性变换)求解一个最小二乘优化目标函数估计一个局部的坐标变换矩阵…

单模光纤模场强度分布以及高斯近似的MATLAB仿真

已知纤芯半径5um,数值孔径NA 0.1,波长 用波长和数值孔径计算归一化常数V 之前我们在单模光纤特征方程及其MATLAB数值求解中,用线性关系拟合过V和W,这里直接用拟合结果 U用V和W计算 clc clear close alla 5e-6;%纤芯半径 NA …

WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)

我在实际解决问题时用到了 【简单暴力解决方案】的《方法一:修改wp-config.php》 和 【简单暴力-且特别粗暴-的解决方案】 更换域名时经常遇到的几个问题: 1、更换域名后,后台无法进入 2、更换域名后,网站模版错乱,css失效 3、更换域名后,网页中图片不显示 这是为什…

第三章,矩阵,09-线性方程组解的判断与求法、矩阵方程

第三章,矩阵,09-线性方程组解的判断与求法、矩阵方程 定理推论1推论2推论3推论4 矩阵方程AXB解法解的存在性推论 玩转线性代数(21)线性方程组解的判断与求法的笔记,相关证明以及例子见原文 定理 对n元线性方程组 A x b Axb Axb,…

[C++ Linux] 基于Linux的文件操作

目录 1. 底层文件访问和文件描述符 1.1 文件描述符 1.2 打开文件 1.3 关闭文件 1.4 写入文件 1.5 读取文件 1. 底层文件访问和文件描述符 1.1 文件描述符 “底层”:指的是操作系统独立提供的,与标准无关。 文件描述符:系统分配给文件…

-L和-rpath-link和-rpath

知识点 现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提…

1.初识Web

文章目录 1. 什么是Web?2.初始Web前端2.1.Web标准 1. 什么是Web? web:全球广域网,也称万维网(www World Wide Web),能够通过浏览器访问的网站。 2.初始Web前端 网页有哪些部分组成? 文字、图片、音频、视频、超链接… 我们看到的网页&am…