首页 > 其他分享 >一个简单的交叉编译riscv的makefile脚本

一个简单的交叉编译riscv的makefile脚本

时间:2024-09-16 13:45:55浏览次数:9  
标签:定义 riscv make makefile COMPILE 编译 编译器 hello

为了编写一个使用特定交叉编译工具链(在这个例子中是`riscv64-unknown-linux-gnu-`)来编译`hello.c`的Makefile脚本,你需要设置`CROSS_COMPILE`变量,并在编译命令中使用这个变量来指定交叉编译器的路径。下面是一个简单的Makefile示例:

```makefile
# 定义交叉编译工具链的前缀
CROSS_COMPILE=riscv64-unknown-linux-gnu-

# 定义C编译器
CC=$(CROSS_COMPILE)gcc

# 定义链接器(通常与编译器相同,但在某些复杂情况下可能需要单独指定)
LD=$(CC)

# 定义编译器标志(如果需要的话)
CFLAGS=-Wall

# 定义最终目标
all: hello

# 编译hello.c生成hello
hello: hello.o
$(LD) $(CFLAGS) -o hello hello.o

# 编译hello.c生成hello.o
hello.o: hello.c
$(CC) $(CFLAGS) -c hello.c

# 清理编译生成的文件
clean:
rm -f hello hello.o

# 伪目标,用于显示帮助信息
.PHONY: help
help:
@echo "make - 使用 $(CROSS_COMPILE)gcc 交叉编译 hello.c"
@echo "make clean - 清理编译生成的文件"
@echo "make help - 显示帮助信息"
```

在这个Makefile中,我们做了以下几件事:

1. 定义了`CROSS_COMPILE`变量,并设置为`riscv64-unknown-linux-gnu-`,这是你的交叉编译工具链的前缀。
2. 使用`CROSS_COMPILE`变量来定义C编译器`CC`和链接器`LD`(在这个例子中,链接器与编译器相同)。
3. 定义了编译标志`CFLAGS`,这里使用了`-Wall`来显示所有警告。
4. 定义了`all`作为默认目标,它依赖于`hello`。当运行`make`而没有指定目标时,`make`会尝试构建`all`目标。
5. 定义了如何从`hello.c`生成`hello.o`和如何从`hello.o`生成最终的`hello`可执行文件。
6. 提供了一个`clean`目标来删除编译过程中生成的文件。
7. 提供了一个`.PHONY`目标`help`来显示如何使用Makefile的说明。

要使用这个Makefile,请确保你的`riscv64-unknown-linux-gnu-gcc`交叉编译器已经安装在你的系统上,并且你的`hello.c`文件位于与Makefile相同的目录中。然后,只需在命令行中运行`make`即可开始编译过程。如果你需要清理编译生成的文件,可以运行`make clean`。

标签:定义,riscv,make,makefile,COMPILE,编译,编译器,hello
From: https://www.cnblogs.com/zxdplay/p/18416228

相关文章

  • 【Linux】Linux项目自动化构建工具-make/Makefile
    make/Makefile1.背景2.概念3.实例代码1.背景一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——......
  • cefsharp.H264.x64.109(88、84、79)可播放视频包免费编译版
    一、下载网址:https://www.nuget.org/packages/CefSharp.H264.x64/109.1.110?_src=templateDownloadpackage(82.59MB)如果是直接下载的cefsharp.h264.x64.109.1.110.nupkg1、用解压缩软件,将这个文件解压缩2、在解压缩目录中(cefshap\cefsharp.h264.x64.109.1.110\cef),再次解压......
  • GCC安全编译选项
    以CMake为例,给出安全编译选项的定义。关闭RPATH特性。set(CMAKE_SKIP_RPATHTRUE)开启栈保护。set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-fstack-protector-strong")或者set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-fstack-protector-all")开启GOT表保护。set(CM......
  • Ubuntu 18.04搭建RISCV和QEMU环境
    Ubuntu18.04搭建RISCV和QEMU环境  原文:https://blog.csdn.net/Eng_ingLi/article/details/135285200 前言因为公司项目代码需要在RISCV环境下测试,因为没有硬件实体,所以在Ubuntu18.04上搭建了riscv-gnu-toolchain+QEMU模拟器环境。安装riscv-gnu-toolchainriscv......
  • C++编译 链接 执行那些事
    OK!Rightnow!  Let's go!如何从源文件开始,实际的文本文档到可执行的二进制代码,写C++程序的基本流程。实际是你有一些C++的源文件,然后将这些源文件给到编译器,编译器将其转成二进制的东西,二进制的东西可能是某种库,或者是可执行的程序。在#符号之后的都是预处理语句......
  • 香橙派Zero3 全志H618设备树插件编译
    基本信息全志H618SDK:香橙派官方提供SDK虚拟机:Ubuntu22.04整体的SDK文件夹名称为:orangepi-build-nextSDK中Linux内核路径:orangepi-build-next/kernel/orange-pi-5.4-sun50iw9编译环境指定首先需要指定交叉编译器:在SDK中的toolchains文件夹中含有很多编译器:对于......
  • 在Ubuntu中编译含有JSON的文件出现报错
          在ubuntu中进行JSON相关学习的时候,我发现了一些小问题,决定与大家进行分享,减少踩坑时候出现不必要的时间耗费截取部分含有JSON部分的代码进行展示char*str=" { \"title\":\"JSONExample\", \"author\":{ \"name\":\"JohnDoe\&quo......
  • 条件编译 - 代码裁剪的工具 --进阶C语言
    目录条件编译-代码裁剪的工具为何要有条件编译条件编译都在那些地方用?见一见条件编译的代码宏是否被定义vs宏是否为真or假编译器也能够自动帮你加上宏GCCVS2023-VS2019#ifdef/#ifndef#if注意事项让#if和#ifdef/#ifndef完全一样条件编译也支持嵌套一个使用#ifdefined能起到很......
  • C++编译器的那些事
    接上文OK!Rightnow!  Let's go!C++编译器是如何工作的?C++编译器实际负责什么?我们把C++代码写成文本。就是这样,他只是一个文本文件,然后我们需要一些将文本转换为实际应用程序的方法,我们的计算机可以运行。从文本形式到实际可执行的二进制文件,我们基本上有两个主要......
  • (2)Proteus8.7添加STM32F103C6直接使用编译xxx.hex文件关键步骤
    1)新建工程中选项 2)Protues8.7支持芯片如下:3)点击STM32选择Keil编译生成的xxx.hex文件 4)使用virtualterminal显示串口信息。仿真状态,点击Debug菜单项,按图操作。 ......