c++ 代码判断CPU 架构,操作系统类型,cmake 中判断CPU 架构,操作系统类型

在c++代码中,我们可以利用,系统或者编译器的宏定义来判断操作系统类型,cpu架构,这在跨平台程序中经常用到。

c++代码中判断

#include<iostream>
  
int main(){
#if defined __linux__
    std::cout<<"linux system"<<std::endl;
#elif defined __ANDROID__
    std::cout<<"android system"<<std::endl;
#endif

#if defined  __aarch64__
    std::cout<<"this is arm cpu"<<std::endl;
#elif defined __x86_64__
    std::cout<<"this id x86 cpu"<<std::endl;
#endif
    return 0;
}

输出:

CMAKE 中判断操作系统类型和 cpu 架构:

 需要利用 cmake中的变量来判断。

CMAKE_HOST_SYSTEM_NAME:操作系统类型

CMAKE_HOST_SYSTEM_PROCESSOR:cpu 指令集

CMakeLists.txt:

cmake_minimum_required(VERSION 3.10.0)

message(${CMAKE_HOST_SYSTEM_NAME})
message(${CMAKE_HOST_SYSTEM_PROCESSOR})

if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
    message("this is Linux")
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Android")
	message("this is Android")
endif()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
    message("this is aarch64 cpu")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
	message("this is x86_64 cpu")
endif()

执行结果:

常用宏定义: 

操作系统预定义宏:

操作系统公共定义64位系统定义
Windows_WIN32_WIN64
macOS__APPLE____LP64__
Linux__linux____LP64__
Android__ANDROID____LP64__

编译器预定义宏:

编译器编译器定义x86指令集AMD64指令集ARM32指令集Thumb指令集ARM64指令集
MSVC_MSC_VER_M_IX86_M_X64_M_ARM_M_THUMB_M_ARM64
GCC__GNUC____i386____x86_64____arm____thumb____aarch64__
Clang__clang____i386____x86_64____arm____thumb____aarch64__

参考:操作系统和编译器预定义宏 – virbox 技术博客

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用 CMake 构建 Android 应用时,可以通过设置 `CMAKE_ANDROID_ARCH_ABI` 变量来指定要构建的 CPU 架构。具体操作如下: 1. 在 CMakeLists.txt 文件添加以下代码: ``` # 指定要构建的 CPU 架构 set(CMAKE_ANDROID_ARCH_ABI "armeabi-v7a") # 设置支持的 CPU 架构 set(CMAKE_ANDROID_ARCH_ABI_LIST "armeabi-v7a" "arm64-v8a" "x86" "x86_64") # 设置支持的 Android 版本 set(CMAKE_ANDROID_API_MIN 24) set(CMAKE_ANDROID_API 30) ``` 2. 修改 `CMAKE_ANDROID_ARCH_ABI` 变量的值以指定要构建的 CPU 架构。在上面的示例,我们设置为 `armeabi-v7a`。 3. 如果需要支持多个 CPU 架构,可以将支持的架构列表添加到 `CMAKE_ANDROID_ARCH_ABI_LIST` 变量。上面的示例,我们添加了 `arm64-v8a`、`x86` 和 `x86_64`。 4. 可以设置 `CMAKE_ANDROID_API_MIN` 和 `CMAKE_ANDROID_API` 变量来指定应用程序支持的 Android 版本。在上面的示例,我们指定了最小版本为 24,目标版本为 30。 5. 构建应用程序时,使用以下命令: ``` mkdir build-android cd build-android cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/android.toolchain.cmake -DANDROID_NDK=/path/to/android-ndk -DCMAKE_ANDROID_API=30 -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a .. make ``` 注意:如果要支持多个 CPU 架构,需要将 `CMAKE_ANDROID_ARCH_ABI` 变量设置为一个支持的架构,然后在构建应用程序时,使用 `-DCMAKE_ANDROID_ARCH_ABI` 参数指定要构建的架构。例如,要构建 `arm64-v8a` 架构的应用程序,可以执行以下命令: ``` cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/android.toolchain.cmake -DANDROID_NDK=/path/to/android-ndk -DCMAKE_ANDROID_API=30 -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a .. make ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值