Makefile文件编写

合集下载

c语言makefile编写实例

c语言makefile编写实例

c语言makefile编写实例Makefile是用来管理程序编译的工具,可以方便地管理程序的编译过程。

使用Makefile可以大大简化程序的编译过程,提高程序的可维护性。

Makefile的语法比较简单,主要由目标、依赖和命令三部分组成。

下面我们以一个简单的C程序为例,来介绍如何使用Makefile进行编译。

假设我们有一个名为hello.c的程序,代码如下:```c#include <stdio.h>int main(){printf("Hello, world!\n");return 0;}```我们需要使用gcc编译器将其编译成可执行文件。

下面是一个简单的Makefile:```makefilehello: hello.cgcc -o hello hello.c```这个Makefile很简单,它定义了一个名为hello的目标,该目标依赖于hello.c文件,并使用gcc命令将其编译成可执行文件。

如果我们在终端中输入make命令,Makefile会自动执行编译过程:```$ makegcc -o hello hello.c```Makefile还可以定义多个目标,每个目标可以有多个依赖和多个命令。

下面是一个稍微复杂一些的Makefile:```makefileCC=gccCFLAGS=-Wall -gall: hello goodbyehello: hello.o$(CC) $(CFLAGS) -o hello hello.ogoodbye: goodbye.o$(CC) $(CFLAGS) -o goodbye goodbye.ohello.o: hello.c$(CC) $(CFLAGS) -c hello.cgoodbye.o: goodbye.c$(CC) $(CFLAGS) -c goodbye.cclean:rm -f *.o hello goodbye```这个Makefile定义了两个目标:all和clean。

交叉编译makefile编写

交叉编译makefile编写

交叉编译makefile编写交叉编译Makefile编写在软件开发中,我们通常会遇到需要在不同平台上编译程序的情况。

当我们需要在一台主机上编译运行另一种架构的程序时,就需要进行交叉编译。

而Makefile作为一种构建工具,可以帮助我们自动化编译过程,提高开发效率。

本文将介绍如何编写适用于交叉编译的Makefile,以实现在不同平台上的程序构建。

一、了解交叉编译概念交叉编译是指在一台主机上编译生成另一种架构的可执行文件。

通常情况下,我们在本机上编写并编译程序,然后在本机上运行。

但是,当我们需要在不同的平台上运行程序时,由于不同平台的指令集、库文件等差异,我们就需要使用交叉编译来生成适用于目标平台的可执行文件。

二、Makefile的基本结构Makefile是一种用于描述程序构建过程的文件,它包含了一系列规则(rules),每个规则由一个或多个目标(target)和依赖项(dependencies)组成。

当某个目标的依赖项发生变化时,Make工具会根据规则自动更新目标文件。

一个基本的Makefile结构如下所示:```target: dependenciescommand```其中,target表示目标文件,dependencies表示目标文件的依赖项,command表示生成目标文件的命令。

三、交叉编译的Makefile编写在编写交叉编译的Makefile之前,我们需要了解目标平台的相关信息,如架构、编译器、库文件等。

以ARM架构为例,我们可以使用arm-linux-gnueabi-gcc作为交叉编译器。

我们需要定义一些变量,用于指定交叉编译工具链和相关参数:```CC = arm-linux-gnueabi-gccCFLAGS = -Wall -O2```其中,CC表示编译器,CFLAGS表示编译参数。

接下来,我们可以定义目标文件和依赖项:```TARGET = myprogramSRCS = main.c foo.c bar.cOBJS = $(SRCS:.c=.o)```其中,TARGET表示目标文件,SRCS表示源文件列表,OBJS表示目标文件列表。

gcc makefile文件的编写

gcc makefile文件的编写

常用的vim命令 命令 常用的
光标命令:(可视模式下) 光标命令:(可视模式下) :(可视模式下 k、j、h、l—上下左右光标移动命令。 上下左右光标移动命令。 、 、 、 上下左右光标移动命令 nG—调转命令,n为行数,该命令使光标立即跳到指定的行数。 调转命令, 为行数 该命令使光标立即跳到指定的行数。 为行数, 调转命令 Ctrl+G—光标所在位置的行数和列数。 光标所在位置的行数和列数。 光标所在位置的行数和列数 编辑命令: 可视模式下) 编辑命令: (可视模式下) i—从可视命令模式进入文本编辑模式。 从可视命令模式进入文本编辑模式。 从可视命令模式进入文本编辑模式 esc键—放回到可视命令模式。 放回到可视命令模式。 键 放回到可视命令模式 查找命令: 可视模式下) 查找命令: (可视模式下) /string 、? 、?String—从光标所在的行向前向后查找相应的字符 从光标所在的行向前向后查找相应的字符 串。 拷贝复制命令: 可视模式下) 拷贝复制命令: (可视模式下) yy—拷贝一行到剪切板 拷贝一行到剪切板 p—粘贴剪切板的内容 粘贴剪切板的内容 在冒号命令方式下: ,表示从当前光标处开始复制n行内容到 在冒号命令方式下:yn,表示从当前光标处开始复制 行内容到 剪切板。将光标移到相应的位置, 即可粘贴剪切板的内容。 剪切板。将光标移到相应的位置,按p即可粘贴剪切板的(可视模式下) 编辑命令(可视模式下)
dd—删除整行命令 删除整行命令 u—恢复前一次的删除动作 恢复前一次的删除动作
冒号命令方式命令 :q—退出命令 退出命令 :w—存档 存档 :wq—存档退出 存档退出 放弃任何改动, :q!--放弃任何改动,强行退出 ! 放弃任何改动
GUNMakeFile、Makefile和makefile 、 和

makefile编写规则

makefile编写规则

makefile编写规则⼀、makefile 规则:⼀般开头都是 Tab ,不能空格, include 前⾯不能是 Tab; 1、如果没编译过,将所有的(.c)⽂件编译并且链接; 2、如果有其中的(.c)⽂件改变,编译并链接改变的⽂件; 3、如果(.h)⽂件被修改,编译引⽤相应的(.c)⽂件, 链接; 4、在随意修改时间的情况下,会导致编译过程中⽣成的(.o 中间⽂件)与可执⾏⽂件时间不⼀致,此时会编译相应的⽂件,并链接,最终编译成可执⾏⽂件;⼆、第⼀版 makefile: 例如有2个 .h ⽂件(utils.h, player.h, actor.h)和 3个 .c ⽂件( main.c, player.c, actor.c)需要编译链接:/*****main.c*********/#include "utils.h"#include "player.h"void main() {// do something}/*******player.c**********/#include "utils.h"#include "actor.h"bool create_player() {// do something}/****actor.c************/#include "utils.h"bool create_actor() {// do something}/********* makefile *****************/test : main.o actor.occ -o test main.o actor.omain.o : main.c utils.h player.h actor.hcc -c main.cpalyer.o: player.c player.h actor.h utils.hcc -c player.cactor.o: actor.h utils.hcc -c actor.cclean:rm test ain.o player.o actor.o 优点:可毒性很强,思路清晰明了; 缺点:⿇烦,重复的依赖过多,当需要编译⼤量⽂件时容易出错;第⼆版:利⽤ makefile 的变量;/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉main.o : main.c utils.h player.h actor.hcc -c main.cpalyer.o: player.c player.h actor.h utils.hcc -c player.cactor.o: actor.h utils.hcc -c actor.c .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ) // 前⾯的(-)表⽰,执⾏过程中不 care 出错;第三版:利⽤ GUN make 的⾃动推导规则 当 make 看到(.o )⽂件,他会⾃动把(.c)⽂件加上依赖关系,包括执⾏的语句(cc -c xx.c);/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉main.o : utils.h player.h actor.hpalyer.o: player.h actor.h utils.hactor.o: actor.h utils.h .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ)第四版:对第三版的整理(有⼀些重复的 .h) 公共的⼀起依赖,单独的单独依赖/********* makefile *****************/OBJ = main.o actor.o // 跟第⼀版⽐较,唯⼀的区别在这test : $(OBJ) // 这⼉cc -o test $(OBJ) // 这⼉$(OBJ) : utils.h actor.omain.o player.o .PHONY : clean // 伪⽬标,避免:如果当前⽬录下存在 clean rm 指令不执⾏clean:-rm test $(OBJ)优点:简洁缺点:不好理解以上的makefike⽂件的基本写法;或许你也发现了,如果有⼏百个源⽂件咋整呢,光是⽬录就要晕死,下⾯就是针对这种情况来说⼀下⼤型⼯程 makefile 的编写设计⼆、⼤型项⽬makefile编写: Makefile 同样也有像 c / c++ 类似的include功能; 例如我们有⼀堆 a.mk , b.mk以及 foo.make和⼀个变量 $(bar),其包含了 e.mk,f.mk, 那么 include foo.make *.mk $(bar) ------- 等价-------》 include foo.make a.mk b.mk e.mk f.mk。

sv中 makefile文件的写法

sv中 makefile文件的写法

很高兴接到您的指示,让我来帮助您撰写关于sv中makefile文件的文章。

让我们来深入了解一下makefile文件的概念和作用。

1. 什么是makefile文件?在SV(SystemVerilog)编程中,makefile文件是用来组织和管理编译工程中的各个源文件和依赖关系的文件。

它定义了编译规则和指令,用于自动化编译和构建整个项目。

2. makefile文件的基本结构在编写makefile文件时,通常会包含以下基本元素:- 变量定义:定义编译器、编译选项、源文件列表等变量。

- 规则定义:定义编译规则,包括目标文件、依赖文件和编译指令。

- 依赖关系:明确指出各个源文件之间的依赖关系,以便make工具能够正确地进行编译。

3. sv中makefile文件的写法在SV项目中,编写makefile文件需要特别关注以下几点:- 定义变量:可以通过定义变量来指定编译器、编译选项、原文件列表等信息,使得makefile文件更加灵活和可维护。

- 设置规则:需要设置好编译规则,包括目标文件、依赖文件和编译指令。

这些规则应该准确反映出SV项目的结构和依赖关系。

- 定义依赖:在makefile文件中,需要清晰地定义各个源文件之间的依赖关系,以确保make工具能够正确地进行增量编译,提高编译效率。

4. 个人观点和理解在我看来,编写高质量的makefile文件对于SV项目的管理和维护至关重要。

一个良好的makefile文件可以提高项目的编译效率,简化编译过程,并且便于团队协作和代码管理。

在编写makefile文件时,应该注重规范和细节,以确保项目的可维护性和稳定性。

总结回顾通过编写这篇文章,我深入了解了sv中makefile文件的写法,并且通过我的个人观点和理解对这个主题进行了探讨。

在文章中多次提及了主题文字,并采用了从简到繁、由浅入深的方式来探讨主题,以便您能更深入地理解。

希望这篇文章能够对您有所帮助。

以上是我为您准备的关于sv中makefile文件的文章,希望能够满足您的要求。

python makefile编写规则

python makefile编写规则

Python Makefile编写规则随着Python语言的流行和应用范围的不断扩大,开发人员在日常工作中经常会用到Makefile来管理代码的编译和部署过程。

Makefile 是一个用于组织代码编译和部署流程的工具,它可以帮助开发人员自动化代码构建的过程,提高工作效率。

在Python项目中,编写规范的Makefile可以帮助开发人员管理项目中繁杂的编译和部署过程,本文将介绍Python Makefile编写的规则和技巧。

一、Makefile简介Makefile是一个包含一系列规则的文件,用于指定代码的编译和部署过程。

它通常由一系列规则、依赖关系和命令组成,它告诉make命令如何编译和信息代码。

Makefile通常用于C/C++项目的编译,但在Python项目中同样有着广泛的应用。

二、Python Makefile编写规则1. 定义变量在编写Python Makefile时,首先需要定义一些变量,这些变量可以用于存储编译器、编译选项、源文件目录、目标文件目录等。

下面是一个简单的Python Makefile示例:```MakefileCC = pythonCFLAGS = -O2SRC_DIR = srcOBJ_DIR = obj```2. 定义规则在Makefile中,可以定义一系列规则来指定如何编译和信息代码。

在Python项目中,通常会定义编译规则、信息规则和清理规则。

下面是一个简单的Python Makefile示例:```Makefileall: $(OBJ_DIR)/m本人n.o$(CC) $(CFLAGS) $(OBJ_DIR)/m本人n.o -o app$(OBJ_DIR)/m本人n.o: $(SRC_DIR)/m本人n.py$(CC) $(CFLAGS) -c $(SRC_DIR)/m本人n.py -o $(OBJ_DIR)/m本人n.oclean:rm -f $(OBJ_DIR)/*.o app```在上面的示例中,定义了三个规则:all规则用于编译信息代码生成可执行文件,$(OBJ_DIR)/m本人n.o规则用于编译源文件生成目标文件,clean规则用于清理生成的目标文件和可执行文件。

C++Makefile文件编写

C++Makefile文件编写

C++Makefile⽂件编写
对现有的⼀个C++动态库⽂件和调⽤程序,分别编写Makefile⽂件,从零开始,这⾥把⾃⼰弄明⽩的⼀些东西分享给⼤家。

1、必须明确Linux下,C++的编译器是g++,C语⾔的是gcc。

⽹上⼤多数⼜是以.c⽂件编写的makefile⽰例,所⽤的编译器是gcc,如果
C++写成了gcc,C语⾔中没有类,会显⽰class未知的定义错误。

2、当有⼀个或多个动态库时,应该为每个动态库都写⼀个Makefile⽂件,为调⽤动态库的程序写⼀个Makefile⽂件,⽽不是写在⼀起,这样才⽅便之后的修改维护。

3、Makefile的基本语句是确定的,当我们要使其易修改时,会预先定义⼀些变量,代表⽂件所在的路径,其实路径是可以组合的,我们要写的就是让编译器能找到需要的⽂件。

介绍我需要写makefile⽂件时的情况。

⼀个动态库⽂件,动态库⽂件中引⽤了外部的头⽂件。

Makefile⽂件执⾏编译的时候,先将.cpp⽂件转换成.o⽂件,在这个构成中依赖.cpp⽂件(源⽂件),以及.cpp中引⽤了的头⽂件。

⼀句句解释上⾯这个为动态库⽂件写的Makefile⽂件:
1' CC指定编译器是g++,代表C++编译器,后⾯出现的CC都表⽰g++;
2' INCLUDE指定头⽂件路径,⼀般的,程序⾃⼰写的头⽂件⽤相对路径,如果不是把动态库⽂件的头⽂件复制到⾃⼰写的⼯程⽂件中的话,就⽤绝对路径指向动态库⽂件的头⽂件;有多个头⽂件路径需要添加时,在路径前添加-I,不要有空格;
3' DLL_OBJ代表要⽣成的动态库⽂件
4' 5' 设定⽬录。

makefile编译流程

makefile编译流程

makefile编译流程Makefile是一种用于自动化编译的工具,它可以根据源代码文件的依赖关系自动编译出目标文件。

Makefile的编写需要遵循一定的规则和语法,下面将介绍Makefile的编译流程。

1. 编写Makefile文件Makefile文件是一个文本文件,其中包含了编译的规则和依赖关系。

在编写Makefile文件时,需要遵循一定的语法规则,如使用TAB键缩进、使用变量和函数等。

2. 执行make命令在Makefile文件所在的目录下执行make命令,make会自动读取Makefile文件,并根据其中的规则和依赖关系进行编译。

如果Makefile文件中没有指定目标,则默认编译第一个目标。

3. 分析依赖关系在执行make命令时,make会先分析Makefile文件中的依赖关系,确定哪些文件需要重新编译。

如果某个源文件被修改了,那么与之相关的目标文件也需要重新编译。

4. 编译源文件在确定需要重新编译的文件后,make会依次编译每个源文件,生成对应的目标文件。

编译过程中,make会根据Makefile文件中的规则和命令进行编译。

5. 链接目标文件在所有的源文件都编译完成后,make会将所有的目标文件链接起来,生成最终的可执行文件。

链接过程中,make会根据Makefile文件中的规则和命令进行链接。

6. 完成编译当所有的源文件都编译完成并链接成功后,make会输出编译成功的信息,并生成最终的可执行文件。

如果编译过程中出现错误,make会输出错误信息并停止编译。

总之,Makefile编译流程是一个自动化的过程,它可以大大提高编译的效率和准确性。

在编写Makefile文件时,需要注意语法规则和依赖关系,以确保编译过程的正确性。

简单的makefile模板

简单的makefile模板

简单的makefile模板makefile不是总⽤到,每次⽤到的时候总要重新找资料,有点⿇烦(怪⾃⼰基础知识不扎实,汗)。

留⼀个通⽤模板放这,⽅便以后使⽤CC = gccCXX = g++LINK = g++CFLAGS = -g -Wall -O2TARGET = mk0SRCS = $(wildcard *.cpp)SRCS += $(wildcard *.c)CXX_OBJS = $(patsubst %.cpp, %.o, $(wildcard *.cpp))C_OBJS = $(patsubst %.c, %.o, $(wildcard *.c))all:$(TARGET)$(TARGET):$(CXX_OBJS) $(C_OBJS)$(LINK) $(CFLAGS) -o $@ $^%.o:%.cpp$(CXX) $(CFLAGS) -c -o $@ $<%.o:%.c$(CC) $(CFLAGS) -c -o $@ $<.PHONY:cleanclean:rm -rf *.o $(TARGET) $(CXX_OBJS) $(C_OBJS)因为项⽬特殊性,经常c与cpp都会⽤到,所以简单写个这样的makefile⽂件上⾯makefile有很⼤局限性,⽐如只能使⽤与所有源⽂件在⼀个⽬录场景。

下⾯展⽰可以多个⽬录下源⽂件,以及程序使⽤动态库的特殊场景CC = gccCXX = g++LINKC = gccLINKCXX = g++CFLAGS = -g -Wall -O2TOP_DIR := $(shell pwd)SRC_DIRS := $(shell find $(TOP_DIR) -maxdepth 1 -type d)TARGET := $(TOP_DIR)/bin/mk0INC_PATH = -I$(TOP_DIR)/include/LIB_PATH = -L$(TOP_DIR)/lib/EXT_LIB = -Wl,-rpath,$(TOP_DIR)/bin/ -lcsayCXX_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp))CXX_OBJS = $(patsubst %.cpp, %.o, $(CXX_SRCS))C_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c))C_OBJS = $(patsubst %.c, %.o, $(C_SRCS))all:$(TARGET)$(TARGET):$(CXX_OBJS) $(C_OBJS) $(shell if [ ! -d $(TOP_DIR)/bin ]; then mkdir $(TOP_DIR)/bin; fi)ifeq ($(CXX_SRCS),) $(LINKC) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^else $(LINKCXX) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^endif%.o:%.cpp $(CXX) $(INC_PATH) $(CFLAGS) -c -o $@ $<%.o:%.c $(CC) $(INC_PATH) $(CFLAGS) -c -o $@ $<.PHONY:cleanclean:rm -rf $(TARGET) $(CXX_OBJS) $(C_OBJS)如上所⽰,代码包括了三个⽬录:. func0 func1⽬录。

制作makfile文件

制作makfile文件
src1/src1.2/Makefile
src2/Makefile
src2/src2.1/Makefile
src2/src2.2/Makefile
bin_PROGRAMS= mybinfile1 mybinfile2 mybinfile3
mybinfile_SOURCES= file1.h file1.c \
file2.h file2.c \
在 linux 下制作 Makefile 要用到的工具有
1、autoscan
பைடு நூலகம் 2、aclocal
3、autoheader
4、automake
5、autoconf
6、./configure
3、依次运行
aclocal
autoheader
automake –add-missing –verbose
autoconf
file3.h file3.c
EXTRA_DIST= otherfile
保存Makefile.am文件
制作Makefile的步骤为:
1、user$/project/autoscan
产生configure.scan 此文件是configure.in的蓝本
cp configure.scan configure.in
./configure
4、则当前目录下就可以产生 Makefile 了
二、把代码按功能分放在几个目录中
假设我们的 TOP 工作目录为project,
目录层次为
保存 configure.in 文件
2、编写 Makefile.am 文件
vi Makefile.am

c++ makefile 例子

c++ makefile 例子

c++ makefile 例子Makefile是用于管理C++项目的工具,它可以帮助我们自动化编译、链接和管理项目中的各个文件。

下面我将以一个简单的C++项目为例,展示一个基本的Makefile。

假设我们有一个C++项目,包括main.cpp、functions.cpp和functions.h这三个文件。

main.cpp包含了程序的入口点,functions.cpp包含了一些函数的实现,functions.h包含了函数的声明。

我们可以创建一个名为Makefile的文件,并在其中编写如下内容:# 定义编译器。

CXX = g++。

# 定义编译选项。

CXXFLAGS = -std=c++11 -Wall.# 定义目标文件。

TARGET = myprogram.# 定义源文件。

SRCS = main.cpp functions.cpp. # 定义目标文件。

OBJS = $(SRCS:.cpp=.o)。

# 默认目标。

all: $(TARGET)。

# 生成目标文件。

$(TARGET): $(OBJS)。

$(CXX) $(CXXFLAGS) -o $@ $^。

# 生成中间文件。

%.o: %.cpp.$(CXX) $(CXXFLAGS) -c $<。

# 清理中间文件和可执行文件。

clean:rm -f $(OBJS) $(TARGET)。

在这个Makefile中,我们首先定义了编译器和编译选项。

然后定义了目标文件、源文件和目标文件的依赖关系。

接着定义了一个默认的目标all,用来生成最终的可执行文件。

然后定义了生成目标文件的规则和清理中间文件和可执行文件的规则。

通过这个Makefile,我们可以使用命令行工具进入项目目录,然后运行make命令来自动编译、链接和生成最终的可执行文件。

这样可以大大简化我们的开发流程。

当然,这只是一个简单的例子,实际项目中可能会更加复杂,但是基本的原理和用法是类似的。

希望这个例子能够帮助你更好地理解和使用Makefile。

多目录的MAKEFILE

多目录的MAKEFILE

由于涉及到多目录下makefile文件的编写,每个目录下makefile 文件都不相同。

现在简单说下我的多目录下makefile文件的编写。

我把所需要的目录都放在src里面,如图所示其中libs存放库文件,bin存放可执行文件,app存放源文件目录,include存放所要包含的头文件makefile编写如下:TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)export TOPDIRLIBPATH := $(TOPDIR)/libsexport LIBPATH######################################################################### sub directoriesSUBDIRS = app.PHONY : $(SUBDIRS)########################################################################all: depend $(SUBDIRS)depend dep:@for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir .depend ; done$(SUBDIRS):$(MAKE) -C $@ allclean:@for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir clean ; done在app下有自己的源文件目录,如图:里面有一个项目叫ebook,当然还可以放更多的项目进来,ebook里面放的就是源文件了,makefile如下:SUBDIRS = ebook #项目是什么,就改什么.PHONY : $(SUBDIRS)all: .depend $(SUBDIRS)$(SUBDIRS):$(MAKE) -C $@ all.depend dep:@for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir .depend ; doneclean:@for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir clean ; done同样在ebook中也要写makefile,也是最后一个makefile了INCLUDEDIRS += -I. -I/usr/include/microwin -I/$(TOPDIR)/includeCC = gccCFLAGS = -O4 $(INCLUDEDIRS)ELF = ../../bin/ebook #相对于可执行文件AOBJS = $(patsubst %.s, %.o, $(wildcard *.s))COBJS = $(patsubst %.c, %.o, $(wildcard *.c))CPPOBJS = $(patsubst %.cpp, %.o, $(wildcard *.cpp))OBJS = $(AOBJS) $(COBJS) $(CPPOBJS)all: .depend $(OBJS)$(CC) $(CFLAGS) $(OBJS) \-L $(LIBPATH) -lini\-L /usr/lib -ljpeg -lnano-X -lfreetype -lttf -lz -lpthread\-L /usr/X11R6/lib -lX11\-o $(ELF)chmod 755 $(ELF)########################################################################.depend: Makefile $(AOBJS:.o=.S) $(COBJS:.o=.c) $(CPPOBJS:.o=.cpp)$(CC) -M $(CFLAGS) $(AOBJS:.o=.S) $(COBJS:.o=.c) $(CPPOBJS:.o=.cpp) > $@sinclude .depend########################################################################clean:rm -f *.o .dependrm -f $(ELF)好了,现在就可以在src下敲写make了。

简单制作Makefile方法

简单制作Makefile方法

1.在当前目录下创建一个名为hello的子目录。hello这个目录用于存放hello.c这个程序及相关文件。新建一个源程序文件hello.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Welcome to use autoconf and automake\n");
通过以上步骤,在源代码所在目录下自动生成了Makefile文件。
configure.in文件
autoconf提用来产生"configure"文件的工具。"configure"是一个Shell脚本,它可以自动设定一些编译参数使程序能够在不同平台上进行编译。autoconf读取configure.in文件然后产生,"configure"这个Shell脚本。
如何使用产生的Makefile文件
执行configure脚本文件所产生的Makefile文件有几个预定的选项可供使用。
l make all:产生设定的目标,即生成所有的可执行文件。使用make也可以达到此目的。
l make clean:删除之前编译时生成的可执行文件及目标文件(形如*.o的中间文件)。
configure.in文件的内容是一系列GNU m4的宏,这些宏经autoconf理后会变成检查系统特性的Shell脚本。configure.in文件中宏的顺序并没有特别的规定,但是每一个configure.in文件必须以宏AC_INIT开头,以宏AC_OUTPUT结束。一般可先用autoscan这个工具扫描原始文件以产生一个configure.scan文件,再对configure.scan作些修改,从而生成configure.in文件

makefile文件编写介绍

makefile文件编写介绍

文档简要整理Android的make脚本的内容。

以供备忘和参考。

1. Build LayersBuild Layers描述的是产品的硬件配置情况,据此make时选择不同的配置和模块。

按照从上到下的顺序,Build Layer分成4层。

Layer sample NoteArch arm, x86 处理器的种类Board -板子类型的代号Device - device配置的类型代号Product -具体产品的代号2. 添加应用2.1 一个例子以calculator为例,app代码可以放到packages/apps/目录下边,一个app对应一个目录,此例,pakcages/apps/Calculator/。

创建Android.mk,已去除多余的注释行。

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_STATIC_JAVA_LIBRARIES := libarityLOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_SDK_VERSION := currentLOCAL_PACKAGE_NAME := Calculatorinclude $(BUILD_PACKAGE)include $(CLEAR_VARS)LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:arity-2.1.2.jarinclude $(BUILD_MULTI_PREBUILT)# Use the folloing include to make our test apk.include $(call all-makefiles-under,$(LOCAL_PATH))至少有一个子目录,src下放源码。

Android.mk中需要赋值的几个LOCAL_XXX变量,LOCAL_PATH,调用my-dir(在defination.mk中定义),得到当前路径,即,<yourSrcPath>/ pakcages/apps/Calculator/。

vivado makefile文件编写实例

vivado makefile文件编写实例

vivado makefile文件编写实例如何编写Vivado Makefile 文件。

Vivado 是一款由Xilinx 公司开发的集成电路设计工具,它提供了丰富的设计和仿真功能,可以用于设计和验证各种数字电路。

Makefile 是一种用于自动化构建和管理项目的文件,它可以定义编译、链接和运行等操作的规则。

在Vivado 中使用Makefile 可以方便地管理项目的编译和仿真过程,提高开发效率。

本文将以中括号内的内容为主题,一步一步回答如何编写Vivado Makefile 文件。

一、创建Makefile 文件首先,在Vivado 工程目录下创建一个名为Makefile 的文件。

可以使用文本编辑器或者命令行工具创建该文件。

二、Makefile 基本结构Makefile 是按照一定的规则编写的,它由一系列的规则定义组成,每个规则包含一个或多个目标、依赖和命令。

规则的语法如下:target: dependenciescommand其中,target 是规则的目标,dependencies 是目标的依赖,command 是执行的命令。

三、Vivado Makefile 常用规则1. all:编译和仿真整个工程all: build sim上述规则定义了一个名为all 的目标,它依赖于build 和sim 两个目标,执行的命令为空。

2. build:编译工程build:vivado -mode batch -source build.tcl上述规则定义了一个名为build 的目标,它执行vivado 命令,并传入-mode batch 和-source build.tcl 两个参数。

这里的build.tcl 是一个Vivado Tcl 脚本,用于自动化执行编译操作。

3. sim:仿真工程sim:vivado -mode batch -source sim.tcl上述规则定义了一个名为sim 的目标,它执行vivado 命令,并传入-mode batch 和-source sim.tcl 两个参数。

Makefile编译生成多个可执行文件

Makefile编译生成多个可执行文件
请求出错错误代码400请尝试刷新页面重试
Makefile编 译 生 成 多 个 可 执 行 文 件
CC = gcc CXX = g++ CFLAGS = -O -DDBG -D_REENTRANT -Wall -DUSE_PTHREAD -pthread LDFLAGS = -ldl -lnsl -lm -lpthread
#wildcard 对 c文件进行展开 SRCS = $(wildcard *.c) $(wildcard *.cpp) #去除路径信息 dir=$(notdir $(SRCS)) # 把后缀.c 替换成 .o OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o,$(dir)) )
%.o : %.cpp $(CXX) -c $(CFLAGS) $^ -o $@
.PHONY : clean
clean : rm -f *.o rm -f ../bin/excute
# install:
#
mv Excute excute; cp -f ordermisd ../bin/;
Makefile常用理解: 参数: makefile里用${temp} 定义的变量: $(temp) 传递的操作。 例如: make clean。 其中clean是伪字符. makefile里的使用:clean:
判断 参数跟变量都只用名字, ifdef 不用${TARGET} 和 $(TARGET)
ifdef TARGET HOST = ${TARGET}-
else HOST =
endif
$(CXX) $(CFLAG$(filter-out main.o main2.o,$(OBJS))

windows makefile编写规则

windows makefile编写规则

windows makefile编写规则【实用版】目录1.编写 Makefile 的必要性2.Makefile 的基本结构3.变量定义4.规则与依赖关系5.编写 Windows Makefile 的注意事项正文一、编写 Makefile 的必要性在软件开发过程中,我们常常需要编译和链接源代码以生成可执行文件。

尤其是在大型项目中,如何自动化地管理这些编译和链接过程就显得尤为重要。

Makefile 就是在这种情况下应运而生的一种工具,它能帮助我们简化和规范化这个过程。

二、Makefile 的基本结构一个典型的 Makefile 主要包括以下几个部分:1.变量定义:用于设置一些编译选项和路径等。

2.规则:定义了如何将源文件编译成目标文件。

3.依赖关系:描述了目标文件依赖于哪些源文件。

三、变量定义在 Makefile 中,我们可以通过“define”语句来定义变量。

例如:```CC = g++CFLAGS = -g -Wall```上述代码定义了两个变量:CC 和 CFLAGS。

CC 表示编译器,这里设置为 g++;CFLAGS 表示编译选项,这里设置为-g(输出调试信息)和-Wall (启用所有警告)。

四、规则与依赖关系规则和依赖关系是 Makefile 的核心部分,它们描述了如何将源文件编译成目标文件。

规则的一般形式为:```目标文件 : 源文件 1 源文件 2...t$(CC) $(CFLAGS) -o $@ $^```其中,$@表示目标文件,$^表示所有源文件。

依赖关系则是通过“depends”语句来描述的,例如:```target.o : source1.o source2.ot$(CC) $(CFLAGS) -c $< -o $@```五、编写 Windows Makefile 的注意事项在 Windows 系统上编写 Makefile 时,需要注意以下几点:1.路径问题:在 Windows 系统上,路径使用双反斜杠()或者单斜杠(/)表示,需要根据实际情况进行设置。

makefile.am编写规则

makefile.am编写规则

makefile.am编写规则makefile.am 规则编写makefile.am 文件是 Automake 工具用来生成 Makefile 的文本文件。

它包含定义如何构建软件项目的一组规则。

编写makefile.am 规则时,有几个关键准则需要遵循:目标和依赖项:每个规则都包含一个目标和一个或多个依赖项。

目标是规则将生成的文件或操作。

依赖项是目标所需的输入文件或先决条件。

目标和依赖项使用冒号 (:) 分隔。

命令:规则还包括一组命令,这些命令指定如何生成目标。

命令以缩进的方式编写,缩进量为一个制表符或四个空格。

变量:Makefile.am 中可以使用变量来存储通用的信息,例如源文件路径或编译器选项。

变量使用美元符号 ($) 和变量名表示。

通用规则:Automake 提供了一些通用规则来处理常见任务,例如编译 C源文件或创建存档。

这些规则可以通过在目标中使用模式来调用。

宏:宏允许您封装重复使用的代码块。

宏使用双圆括号 (()) 表示。

编写规则示例:以下是一个示例 makefile.am 规则,用于编译一个名为main.c 的 C 源文件:```makefile.ammain.o: main.c$(CC) $(CFLAGS) -c main.c```在这个规则中:`main.o` 是目标文件,表示编译源文件 main.c 后生成的对象文件。

`main.c` 是依赖项,表示要编译的目标。

`$(CC)` 是变量,存储编译器命令。

`$(CFLAGS)` 是变量,存储编译器选项。

编写 makefile.am 规则的最佳实践:保持规则简短且易于阅读。

使用注释来解释每个规则的目的。

尽量使用通用规则和宏来简化规则编写。

彻底测试规则以确保其正确性。

遵循这些准则将帮助您编写清晰且维护良好的 makefile.am 文件,从而简化软件构建过程。

stm32 makefile编写规则

stm32 makefile编写规则

stm32 makefile编写规则STM32是一款广泛应用于嵌入式系统开发的微控制器系列,而Makefile是一种常用的构建工具,用于自动化编译和构建程序。

在STM32的开发过程中,使用Makefile可以方便地管理项目的构建过程,提高开发效率。

本文将介绍如何使用Makefile编写规则来进行STM32的开发。

在开始编写Makefile规则之前,需要了解一些基本概念。

首先,Makefile是一个文本文件,其中包含了一系列规则,用于描述如何生成目标文件。

每个规则由一个或多个依赖项和一个命令组成。

当目标文件的依赖项发生变化时,Make工具会根据规则执行相应的命令来生成目标文件。

下面是一个简单的Makefile规则示例:```Makefile# 定义目标文件名TARGET = main# 定义编译器和编译选项CC = arm-none-eabi-gccCFLAGS = -mcpu=cortex-m4 -mthumb -c -g -O0 -std=c99# 定义链接器和链接选项LD = arm-none-eabi-ldLDFLAGS = -Tstm32.ld# 定义目标文件和源文件OBJS = main.oSRCS = main.c# 默认规则all: $(TARGET).elf# 生成目标文件$(TARGET).elf: $(OBJS)$(LD) $(LDFLAGS) -o $@ $^# 生成目标文件的依赖关系$(OBJS): $(SRCS)$(CC) $(CFLAGS) -o $@ $<# 清理生成的文件clean:rm -rf $(TARGET).elf $(OBJS)```在上述示例中,首先定义了目标文件名(TARGET)、编译器(CC)和编译选项(CFLAGS)、链接器(LD)和链接选项(LDFLAGS)、目标文件(OBJS)以及源文件(SRCS)等变量。

接着定义了一个默认规则(all),该规则依赖于目标文件($(TARGET).elf)。

windows makefile编写规则

windows makefile编写规则

windows makefile编写规则在Windows系统中,可以使用GNU Make工具来编写Makefile。

Makefile是一个文本文件,其中包含一系列规则(rules),用于指定项目的构建过程。

以下是编写Makefile规则的基本规范:1. 每条规则通常包括三个主要部分:目标(target)、依赖(prerequisites)和命令(commands)。

2. 目标是规则要构建的文件名。

它可以是一个单独的文件,也可以是一个虚拟目标(如"clean"),用于执行一系列命令。

3. 依赖是目标所依赖的文件名列表。

当某个目标文件的依赖文件发生变化时,目标就需要重新构建。

4. 命令指示Make工具构建目标的具体操作。

它必须以Tab键开头,紧随目标和依赖之后。

5. 注释可以用#符号开头。

注释可以出现在任何地方,但不能出现在命令之前。

6. 变量允许您定义一些可重用的值,如编译器命令或编译参数。

使用变量可以使Makefile更加易于维护和扩展。

以下是一个简单的Windows Makefile示例:```makefile# 定义变量CC = gccCFLAGS = -Wall# 默认构建目标all: hello.exe# 目标hello.exe依赖于hello.o,执行gcc命令将hello.o链接成可执行文件hello.exehello.exe: hello.o$(CC) $(CFLAGS) -o hello.exe hello.o# 目标hello.o依赖于hello.c,执行gcc命令编译hello.c为目标文件hello.ohello.o: hello.c$(CC) $(CFLAGS) -c hello.c# 清理操作clean:del hello.o hello.exe```在这个示例中,我们定义了两个变量CC和CFLAGS,分别表示编译器和编译参数。

然后,我们使用这些变量来构建目标。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

make工具
• make是一个重要的软件维护程序,可以根据程序 文件的修改情况自动重新编译链接目标代码,以 保证目标代码总是由它的最新文件组成 • make根据Makefile文件所描述的规则和文件最后修 改的时间来重新编译链接目标代码 • make的命令格式:
– make [-f makefile] [ option ] ... target ...
greeting.c
• 4、执行make • 5、执行./greeting
实验步骤(2)
• 1、在testmakefile下创建目录test2, • 2、在test2目录下创建三个文件greet.c, func1.c func2.c ,
• 3、编写Makefile文件 • 4、执行make • 5、执行./greet
变量
• 变量是在makefile中定义的名字,用来代替一个文本字符串, 该文本字符串称为该变量的值 • 变量的定义
– 变量名 = 值
• 递归调用扩展型变量 • eg:foo = $(bar) bar=os
– 变量名:= 值
• 简单扩展型变量 • eg:bar:=os foo = $(bar)
• 引用变量时需在前面加上$
make的一些常用命令选项
• -p 表示打印出Makefile中所有宏定义和描述内部规 则的相关行 • -i 忽略执行中所遇到的所有错误 • -k 在错误发生后尽可能的继续执行 • -d 打印调试信息 • -s 执行而不显示执行状况 • -n 打印出要执行的命令,但是并不执行这些命令, 可以用来检查Makefile的正确性
隐含规则
• make内部自定义的一些规则。当一个target没有显 式的定义生成规则,make寻找一条隐含规则生成 该target 例: • foo : foo.o bar.o
cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
一般来说foo.o是由foo.c等源文件生成,如果foo.o没 有定义生成规则,则make可能编译foo.c生成foo.o
实验步骤(3)
• 1、在testmakefile下执行cp –rf test2 test3 • 2、进入test3目录,保留后缀为c的源文件, 其他删除 • 3、建立makefile文件,内容见下页 • 4、执行make • 5、执行./greet
makefile
四、实验思考
• 1、怎样自己来写简单的makefile文件? • 2、怎样组织多个源文件的工程,进行编译? • 3、写makefile文件有哪些要注意的?
Make的工作步骤
• • • • • • • 读入所有的Makefile 读入被include的其它Makefile 初始化文件中的变量 推导隐含规则,并分析所有规则 为所有的目标文件创建依赖关系链 根据依赖关系,决定哪些目标要重新生成 执行生成命令。
三、实验步骤(1)
• 1、在/embedded目录下创建目录,目录名: testmakefile, • 2、在testmakefile下创建目录test1 • 3、在test1下建文件greeting.c,程序见下页 • 4、编写Makefile文件,如下
变量
• 变量是在makefile中定义的名字,用来代替一个文本字符串, 该文本字符串称为该变量的值 • 变量的定义
– 变量名 = 值
• 递归调用扩展型变量 • eg:foo = $(bar) bar=os 缺点: 1.不能在变量后追加内容。如在: CFLAGS = $(CFLAGS) -O 在变量 扩展过程中可能导致无穷循环 2.在定义中引用任何函数时,变 量一旦展开函数就会立即执行
– 变量名:= 值
• 简单扩展型变量 • eg:bar:=os foo = $(bar)
• 引用变量时需在前面加上$
GNU make的主要预定义变量
• $*:去除目标文件扩展名的文件名。比如foo.o为目 标文件,则$*为foo • $+:所有的依赖文件,可能包含重复的文件 • $<:第一个依赖文件的名字 • $?:修改日期比目标文件的创建日期要晚的依赖文 件 • $@:目标文件的完整名称 • $^:所有的依赖文件,不包含重复的文件 • $%:如果目标文件是归档文件,则其表示归档文件 的成员名
显式规则
• 由Makefile的书写者明显指出,要生成的文 件,文件的依赖文件,执行的命令
– target ... : prerequisites ... command ... – target:要生成的目标文件 – prerequisites:target所依赖的文件 – command:make所要执行的命令(任意的shell 命令)嵌入式系统Makefi Nhomakorabeae文件编写
一、实验目的
• 1、读懂makefile文件,能根据makefile文件 理清程序结构 • 2、能编写简单makefile
二、实验原理
• 1、makefile • 2、make工具
Makefile
• Makefile主要包含了五部分:
– – – – – 显式规则 隐含规则 变量 文件指示 注释
GNU make的主要预定义变量(续)
• • • • • • • • • • • • AR:归档维护程序的名称,默认值为ar ARFLAGS:归档维护程序的选项 AS:汇编程序的名称,默认值为as ASFLAGS:汇编程序的选项 CC:C编译器的名称,默认值为cc CFLAGS:C编译器的选项 CPP:C预编译器的名称,默认值为$(CC)-E CPPFLAGS:C预编译器的选项 CXX:C++编译器的名称,默认值为g++ CXXFLAGS:C++编译器的选项 FC:FORTRAN编译器的名称,默认值为f77 FFLAGS:FORTRAN编译器的选项
文件指示 与 注释
• 文件指示
– 引用其他的Makefile:include <filename> – 根据某些情况指定Makefile中的有效部分:ifeq 、 ifneq,ifdef、ifndef – 定义一个多行的命令 :define
• 注释:Makefile中只有行注释,其注释使用 “#”字符
相关文档
最新文档