Makefile指定cpu架构选项.md

思路

Makefile 构建,使用环境变量来控制编译选项

  1. 设置环境变量:在命令行上或在用户的环境配置文件中设置环境变量,如 ARCH=armARCH=x86
  2. 在 Makefile 中使用条件语句:Makefile 使用 ifeqifdef 等条件语句根据环境变量的值选择不同的编译器选项、链接器选项和其他设置。
ARCH 可选值
  1. aarch64:代表 ARM 架构的 64 位版本(ARMv8-A 和更高版本)。
  2. x86-64(或 amd64):代表 Intel 和 AMD 的 64 位 x86 架构。
  3. risc-v:指的是开源的 RISC-V 架构。
  4. mips:代表 MIPS 架构,一种较老的 RISC 架构,常用于嵌入式系统。
  5. armarmv7:用于 ARM 架构的 32 位版本(如 ARMv7)。
  6. powerpcppc:代表 PowerPC 架构,一种由 IBM、摩托罗拉和苹果开发的 RISC 架构。
  7. sparc:代表由 Sun Microsystems 开发的 SPARC 架构。
  8. i386x86:指的是 Intel 和 AMD 的 32 位 x86 架构。
  9. s390x:用于 IBM 的 System z 大型机架构。
  10. ia64:代表 Intel 的 Itanium 架构,这是一种不同于 x86 的 64 位架构。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 默认的编译器
CC=gcc
# 默认的编译器标志
CFLAGS=-Wall

# 根据 ARCH 环境变量设置编译器和特定的编译器标志
ifeq ($(ARCH),aarch64)
CC=arm-linux-gnueabihf-gcc
CFLAGS+= -march=arm
else ifeq ($(ARCH),x86-64)
CC=gcc
CFLAGS+= -march=x86-64
endif

# 目标可执行文件名
TARGET=myapp

# 构建目标
all: $(TARGET)

$(TARGET): myapp.c
$(CC) $(CFLAGS) -o $(TARGET) myapp.c

# 清理构建文件
clean:
rm -f $(TARGET)

.PHONY: all clean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 默认的目标平台
ARCH ?= x86-64

# Go 编译器
GO=go

# 根据 ARCH 环境变量设置 GOARCH
ifeq ($(ARCH),aarch64)
GOARCH=arm64
else ifeq ($(ARCH),x86-64)
GOARCH=amd64
else
$(error Unknown or unsupported architecture)
endif

# 目标可执行文件名
TARGET=myapp

# 源代码文件
SRC=$(wildcard *.go)

# 构建目标
all: $(TARGET)

$(TARGET): $(SRC)
GOARCH=$(GOARCH) $(GO) build -o $(TARGET) $(SRC)

# 清理构建文件
clean:
rm -f $(TARGET)

.PHONY: all clean

Makefile指定cpu架构选项.md
https://abrance.github.io/2023/12/27/domain/makefile/Makefile指定cpu架构选项/
Author
xiaoy
Posted on
December 27, 2023
Licensed under