【转】Makefile步步为营

Makefile步步为营

本目录主要包含Makefile一步步递进学习的示例代码
makefile代码实例:https://www.lanzous.com/i9m9npi

step0:Makefile小实验

进行Makefile小实验,体验Makefile的功能。
目录中的Makefile是不严谨的编写方式。
目录中的Makefile_PHONY是严谨的编写方式。

make实验

切换至step0目录下,即Makefile所在的同级目录,使用如下命令实验:

#在主机上Makefile所在的目录执行如下命令
#查看当前目录的内容
ls
#执行make命令,make会在当前目录下搜索“Makefile”或“makefile”,并执行
make
#可看到make命令后的输出,它执行了Makefile中编写的命令
#查看执行make命令后的目录内容,多了test.txt文件
ls
#执行Makefile的targetd目标,并查看,少了test.txt文件
make   targetd
ls
#执行Makefile的targetb目标,并查看,又生成了test.txt文件
make  targetb
ls
#执行Makefile的targetc目标
make  targetc

make使用-f参数可以指定使用其它文件。

#通过-f选项指定make使用的Makefile文件
make -f Makefile_PHONY
#本示例中其它操作与Makefile功能相同

step1:使用Makefile编译程序

使用Makefile编译Hello示例程序。

编译

编译的输出为hello_main文件
切换至step1目录下,即Makefile所在的同级目录,使用如下命令编译:

#后编译
make

运行

编译后使用如下命令运行:

./hello_main

step2:使用Makefile默认编译规则

使用Makefile编译Hello示例程序,Makefile中使用o文件依赖

编译及运行

本实验编译及运行操作与step1相同,切换至step2目录操作即可。


step3:使用变量

使用Makefile编译Hello示例程序,Makefile中使用变量

编译及运行

本实验编译及运行操作与step1相同,切换至step3目录操作即可。

Makefile_test实验

Makefile_test文件用于变量赋值实验测试,可执行如下命令实验:

make -f  Makefile
#实验输出为Makefile中各个变量的值

step4:使用变量及分支

使用Makefile编译Hello示例程序,Makefile中使用变量定义最终目标,并使用分支支持不同的架构

x86架构编译及运行

切换至step4目录下,即Makefile所在的同级目录,使用如下命令编译:

#先清理,否则可能因为*.o文件架构不同而出错
make clean
#后编译
make

编译后使用如下命令运行:

./hello_main

ARM架构编译及运行

切换至step4目录下,即Makefile所在的同级目录,使用如下命令编译:

#先清理,否则可能因为*.o文件架构不同而出错
make clean
#后编译
make ARCH=arm

编译后使用如下命令运行:

./hello_main

step5:使用函数

使用Makefile编译Hello示例程序,Makefile中使用函数,并支持层级目录。

x86架构编译及运行

切换至step5目录下,即Makefile所在的同级目录,使用如下命令编译:

make

编译的输出目录为bulid_x86

编译后使用如下命令运行:

.bulid_x86/hello_main

ARM架构编译及运行

切换至step5目录下,即Makefile所在的同级目录,使用如下命令编译:

make ARCH=arm

编译的输出目录为bulid_arm

编译后使用如下命令运行:

.bulid_arm/hello_main

清理文件

若要清理文件,也要指定架构

  1. 清理x86的编译输出,默认架构为x86,直接make clean即可:
make clean
  1. 清理arm的编译输出,需要使用ARCH=arm指定:
make clean ARCH=arm
  1. 清理所有的编译输出,可以直接使用cleanall目标:
make cleanall

原文地址:https://www.cnblogs.com/futurelei/p/12354297.html

时间: 2024-11-13 06:41:43

【转】Makefile步步为营的相关文章

关于makefile中变量的多次赋值以及override指令

1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影响这条原则. 1.3 原则3 当使用了override指令定义赋值了变量后,其后对该变量的所有的赋值都是无效的.但是override之前的所有的赋值都是有效的.使用的时候是往前最近原则. 2 override变量.命令行参数和普通变量之间的屏蔽关系 override变量会屏蔽命令行参数,除非用+=:

使用Makefile去管理程序

前言:在gcc中如何使用分屏操作  : 在命令行中使用    : sp + filename     vim  Makefile  编辑make工程   第一行使用 # 进行注释   说明是什么make  内容格式:  目标文件:  依赖文件 ·  ·  ·  但是一定要注意如果要使用编译指令一定要用table键 不能使用几个空格代替 另外  max.h 和min.h 的内容就是函数声明 下面说下这样make的好处吧:  在大型程序中能很好帮我们管理我们的代码和项目,程序的任何部分分工都很明确,

Contiki 2.7 Makefile 文件(三)

2.第二部分 这里的usage,targets,savetarget,savedefines都是伪目标. 和all不同,这些伪目标不会被执行,除非显式指定这些目标. 这里有两个目标savetarget,savedefines前边我们提过. 通过命令 make TARGET=esb savetarget可以保存默认的TARGET到Makefile.target中. 通过命令 make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines 可以保存默

My first makefile to compile multiple C files

I have three files to compile: main.c, func.c,  func.h The steps: 1   main.c   to   main.o 2   func.c    to   func.o 3    link main.o func.o to main(file that can execute) So, u need to run at least three commands without a Makefile.Then if u have 10

liunx中ctags 与makefile的使用

ctags 是vim下可以帮助阅读代码的一个的工具,它可以很方便的看到程序的源代码 使用ctags可以有两种方法:(1).可以在任意目录下建立文件,然后使用 ctags *.c,这个命令的意思是把当前目录下的所有文件生成标签文件(vim可以通过标签,跳转到标签文件处)例如: vim ctag.h vim ctag.c vim main.c 在main.c中把光标移至fun函数处,按Ctrl+[就会跳转到fun函数定义的地方,即ctag.c处,Ctrl+T回转到main.c函数 (2).输入cta

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

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

makefile编译文件介绍

通常在C语言程序开发中,尤其是大型项目的构建,我们不可能一个文件一个文件去编译,通常会编写Makefile文件使用make命令完成项目的编译构建: 如下:math项目是简单的计算那个数字大,哪个数字小,以及两个数字和的小程序.由max.c,min.c , sum.c 和main.c构成,分别如下: max.c #include <stdio.h> int max(int a,int b) {     if(a>b){         return a;      }else{      

通用多目录makefile的写法

我的项目文件层次是:项目名称/include.output.src src/admin.stu.tch.common 最外层的Makefile: DEBUG = yMYDEBUG = DEBUGifeq ($(DEBUG),y)DEBFLAGS = -O -g -D$(MYDEBUG)elseDEBFLAGS =endif PRJ_HOME := $(shell pwd)SOURCES := $(wildcard *.c)OBJECTS := ${SOURCES:%.c=%.o}INCPATH

mcstructs使用CMake生成Makefile文件

CMakeLists.txt project(MCSTRUCTS) set(SRC_LIST src/main.c src/mcslist.c src/mcsringbuf.c) add_executable(mcstructs ${SRC_LIST}) 执行过程: [email protected]:~/projects/mcstructs$ cmake . -- Configuring done -- Generating done -- Build files have been writ