make命令

目录

1、一个简单 makefile例子

2、make指令参数

2.1、make -f filename

2.2、make -C M=


        代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。

1、一个简单 makefile例子

        Make这个词,英语的意思是"制作"。Make命令直接用了这个意思,就是要做出某个文件。比如,要做出文件a.txt,就可以通过以下步骤实现:

        1)书写规则,描述如何通过调用其它命令实现这个功能。

        比如,假设文件 a.txt 依赖于 b.txt 和 c.txt ,是后面两个文件连接(cat命令)的产物。那么,make 需要知道下面的规则。

a.txt: b.txt c.txt
    cat b.txt c.txt > a.txt

        也就是说,make a.txt 这条命令的背后,实际上分成两步:第一步,确认 b.txt 和 c.txt 必须已经存在,第二步使用 cat 命令 将这个两个文件合并,输出为新文件。

        像这样的规则,都写在一个叫做Makefile的文件中,Make命令依赖这个文件进行构建。Makefile文件也可以写为makefile。

        2)命令执行

$ make a.txt

        此时, 会默认读取当前目录Makefile或makefile的文件,根据makfile中的规则执行,生成a.txt文件。

测试:

make命令_第1张图片

结果:

        1)生成a.txt文件,内容为:

make test.

        2)终端打印出执行命令:

2、make指令参数

2.1、make -f filename

        执行make指令默认查找解析makefile文件中的规则,也可通过用命令行参数指定为其他文件名。如:

$ make -f rules.txt
# 或者
$ make --file=rules.txt

        上面代码指定make命令依据rules.txt文件中的规则,进行构建。

2.2、make -C M=

        -C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;

        M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。

Makefile:
PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-source-2.6.15/
 
obj-m := test.o
module-objs := test.o
 
all:
       $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
clean:
       rm *.ko
       rm *.o

        执行:make -C /usr/src/linux-source-2.6.15/ M=/home/vmeth modules,在test.c和Makefile所在的目录下运行make,如果看到类似输出:

make[1]: Entering directory `/usr/src/linux-source-2.6.15'
  CC [M]  /home/vmeth/hello.o
  Building modules, stage 2.
  MODPOST
  CC      /home/vmeth/hello.mod.o
  LD [M]  /home/vmeth/hello.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.15'

摘抄自:make -C M= - 屁屁侠 - 博客园

        总之,make只是一个根据指定的Shell命令进行构建的工具。它的规则很简单,你规定要构建哪个文件、它依赖哪些源文件,当那些文件有变动时,如何重新构建它。

你可能感兴趣的:(ubuntu/tx2,makfile,make)