Makefile文件(DE1-soc软件实验”hello_word")

DE1-soc软件实验”hello_word"中,hello_word此程序很好理解,那Makefile文件又如何理解呢?

所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成"自动化编译",一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的唯一的一件事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。

make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。(来自360百科)

所以make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。也就是后面编写完makefile文件后,在Embedded_Command_Shell.bat输入make时会多出一个main.o文件。

Makefile 文件具体的写法和语言格式很复杂,下面简单介绍一下本次书写的程序;

#
TARGET = my_first_hps    //定义了生成的可执行文件的名字
//arm-linux-gnueadbihf-gcc的交叉编译环境
#
CROSS_COMPILE = arm-linux-gnueabihf-
CFLAGS = -g -Wall  -I ${SOCEDS_DEST_ROOT}/ip/altera/hps/altera_hps/hwlib/include      //CFLAGS: 指定头文件(.h文件)的路径
LDFLAGS =  -g -Wall                                                                    //LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。
CC = $(CROSS_COMPILE)gcc
ARCH= arm

build: $(TARGET)

$(TARGET): main.o
    $(CC) $(LDFLAGS)   $^ -o $@ 

%.o : %.c
    $(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
    rm -f $(TARGET) *.a *.o *~

这里又要引入两个名词:宿主机(Host),和目标机(Target)。开发板由于硬件所限不能直接在本地建立起开发环境,需要在配置高的个人电脑上开发完软件后再移植到开发板上运行。此处的开发板就是Target,个人电脑就是Host。
简单来说,交叉编译就是在一个平台上生成另一个平台上的可执行代码。由于Target和Host的平台不一样(平台包括体系结构,最直观的就是CPU不一样,一个是x86,另一个是ARM,使用的汇编语言都不一样),不能使用Host的编译工具,而需要在Host中安装Target的编译工具链(cross compilation tool chain),来编译得到的运行于Target上的可执行代码。

(来源:CSDN 原文:https://blog.csdn.net/lucykingljj/article/details/40619671 )

原文地址:https://www.cnblogs.com/fcfc940503/p/10462875.html

时间: 2024-08-03 17:23:55

Makefile文件(DE1-soc软件实验”hello_word")的相关文章

SOC-training image镜像内核文件(DE1-soc软件实验”hello_word&quot;)

在DE1-soc软件实验”hello_word"此实验中,我开始并没有将SOC-training image镜像内核文件用win32disk写入sd卡中,直接插入sd卡,发现putty连接com3口是一直处于不能连接状态:后来写入SOC-training image镜像内核文件,在连接时就成功了,那么,SOC-training image镜像内核文件到底是什么呢? 以下为自己的理解,欢迎各位大神指正. Linux内核在PC上以文件的形式存在(保存成磁盘文件形式),就是所谓的"映像文件&

Makefile文件编写和autotools的使用

在Linux或Unix环境下,对于只含有几个源代码文件的小程序(如hello.c)的编译,可以手工键入gcc命令对源代码文件逐个进行编译:然而在大型的项目开发中,可能涉及几十到几百个源文件,采用手工键入的方式进行编译,则非常不方便,而且一旦修改了源代码,尤其头文件发生了的修改,采用手工方式进行编译和维护的工作量相当大,而且容易出错.所以在Linux或Unix环境下,人们通常利用GNU make工具来自动完成应用程序的维护和编译工作.实际上,GNU make工具通过一个称为Makefile的文件来

linux中make命令的简单使用以及Makefile文件的书写

Makefile 会不会写makele,从一个侧面说明了一个是否具备完成大型工程的能力. 一个工程中的源件不计数,其按类型.功能.模块分别放在若干个目录中,makele定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makele就像一个Shell脚本一样,其中也可以执行操作系统的命令.makele带来的好处就是"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率. ma

工程管理之makefile与自动创建makefile文件过程

(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的真相么,想知道Linux Makefile系统中藏有的内在奥义么,只有我来给大家全面讲解介绍Linux Makefile系统作为Linux下的程序开发人员,大家一定都遇到过Linux Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Linux Mak

【转】SYNOPSYS VCS Makefile文件编写与研究

原文地址:http://www.cnblogs.com/zhtxwd/archive/2012/03/30/2425180.html YNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明: makefile 其实完全可以用csh或其他脚本来编写,只是VCS使用的linux内置的make命令定义了一个标准的仿真脚本,make命令是专门用来 做项目的源文件管理和编

linux中Makefile文件相关内容

第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefile关系到了整个

linux程序设计——make命令和makefile文件(第九章)

9.2 make命令和makefile文件 9.2.3 makefile文件中的注释 makefile文件中的注释以#号开头,一直延续到这一行的结束.和C语言的源文件注释一样,makefile文件中的注释可以帮助程序的编写者以及其他人理解最初编写这个文件的目的. 9.2.4 makefile文件中的宏 mkaefile文件允许使用宏以一种更通用的格式来书写它们. 通过语句MACRONAME=value在makefile文件中定义宏,引用宏的方法是使用$(MACRONAME)或${MACRONAM

MakeFile文件是什么——内容、工作原理、作用、使用

MakeFile文件是什么?它里面包含什么内容.具有什么作用.怎么使用?下面就来具体说说. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧

例解 autoconf 和 automake 生成 Makefile 文件

转自:http://www.ibm.com/developerworks/cn/linux/l-makefile/ 引子 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项 目开发还是安装应用软件,我们都经常要用到make或 make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系. 但是如