如何写兼容ARM和X86的编译脚本(Makefile、CMakeLists.txt、shell脚本)

编译兼容主要包括3个方面,1. CMakeLists.txt 兼容,2. Makefile 兼容,3. shell兼容

  1. CMakeLists.txt
IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
    SET(CMAKE_CXX_FLAGS "-fPIC -DLINUX -m64 -Wall -Wno-unused-function -Wno-unused-parameter -std=c++11 ")
ELSEIF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHS "aarch64")
    SET(CMAKE_CXX_FLAGS "-fPIC -DLINUX -march=armv8-a -mabi=lp64 -mtune=tsv110 -fsigned-char -Wall -Wno-unused-function -Wno-unused-parameter -std=c++11 ")
ELSE()
    SET(CMAKE_CXX_FLAGS "-fPIC -DLINUX -Wall -Wno-unused-function -Wno-unused-parameter -std=c++11 ")
ENDIF()
  1. Makefile
ifeq ($(shell arch), aarch64)
    CPPFLAGS=-g -O2 -march=armv8-a -mabi=lp64 -mtune=tsv110 -fsigned-char
else
    CPPFLAGS=-g -O2 -m64
endif
  1. shell
!/bin/bash
get_arch=`arch`
if [[ $get_arch =~ "x86_64" ]];then
    echo "this is x86_64"
elif [[ $get_arch =~ "aarch64" ]];then
    echo "this is arm64"
elif [[ $get_arch =~ "mips64" ]];then
    echo "this is mips64"
else
    echo "unknown!!"
fi
### 如何使用 `CMakeLists.txt` 文件编译生成 Makefile 为了利用 `CMakeLists.txt` 编译并生成 Makefile,需遵循特定流程。首先定义项目的名称,在 `CMakeLists.txt` 中通过 `project()` 命令指定项目名[^4]。 接着设置最小版本需求以确保兼容性: ```cmake cmake_minimum_required(VERSION 3.10) ``` 随后添加源文件目录与目标可执行文件或库的信息。对于简单的应用程序而言,可以这样入 `add_executable()` 或者针对库使用 `add_library()` 函数来声明构建的目标对象及其依赖的源码文件列表[^1]。 当一切准备就绪之后,可以通过命令行运行 cmake 来配置生成所需的构建系统文件(如 Makefiles)。具体操作是在终端中进入包含有 `CMakeLists.txt` 的根目录下输入如下指令完成初始化过程[^2]: ```bash mkdir build && cd build cmake .. ``` 上述命令会在当前工作区创建一个新的子文件夹名为 `build` 并切换到该位置继续后续处理;紧接着调用 `cmake ..` 将读取上级父级路径中的 `CMakeLists.txt` 配置信息进而生产相应的本地化平台专用脚本——即 Makefile。 一旦成功生成了 Makefile 后,则可以直接在此基础上进一步执行标准 make 流程来进行实际编译动作: ```bash make ``` 这将依据先前由 CMake 所产生的规则集去自动化地完成整个软件包内的所有组件组装任务直至最终产出预期的结果二进制文件或者共享库形式存在。 #### CUDA 支持下的额外步骤 如果涉及到 GPU 加速计算部分比如 CUDA 程序开发的话,则还需要特别注意一点就是在 `CMakeLists.txt` 内部增加对相应编程语言的支持声明语句 `enable_language(CUDA)` 匹配 `.cu` 类型扩展名的相关资源定位逻辑[^3]。 ```cmake enable_language(CUDA) aux_source_directory(. SRC_LIST) aux_source_directory(src SRC_LIST) set(SRC_LIST ${SRC_LIST} src/*.cu) ``` 以上措施能够使得 CMake 正确识别并处理来自不同类型的源代码单元从而实现更广泛的应用场景覆盖能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏 克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值