make命令作用:

  对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高项目开发的效率。

make命令下载:

先更新找到ubuntu-make

sudo apt-get update
sudo apt-get install ubuntu-make

再下载(我Ubuntu上直接有make命令,所以我没使用上面那两个命令,运行下面命令我的make命令更新到了最新版本)

sudo apt-get install make

gcc编译过程:

对一个test.c文件进行编译首先需要使用下面命令

gcc -c test.c

使源文件变成*.o文件

之后使用下面命令

gcc -o test.exe test.o

这条命令的作用就是指出test.exe可执行文件(因为Linux上可执行文件不需要exe结尾,所以你也可以换一个其他名字)的生成需要test.o文件(如果需要更多*.o文件在后面列出就可以)

make如何工作:

make在当前目录下寻找“Makefile”或“makefile”文件
若找到,查找文件中的第一个目标文件.o
若目标文件不存在,根据依赖关系查找.s文件
若.s文件不存在,根据依赖关系查找.i文件
若.i文件不存在,根据依赖关系查找.c文件,此时.c文件一定存在,于是生成一个.o文件,再去执行

makefile文件格式:

<target>: <prerequisites>
[Tab]<commands>

第一行冒号前为目标,冒号后为前置条件;第二行必须由一个Tab键起首,后接命令;目标是必须的,不可省略;前置条件和命令是可选的,但两者必须至少存在一个。

示例:

test2.exe: test2.o
        gcc -o test2.exe test2.o

test2.o: test2.c
        gcc -c test2.c

这意味着生成test.exe需要前置条件test2.o,生成test.o需要前置条件test2.c

1、test.c文件存在所以会执行下面的代码 gcc -c test2.c

2、test.o文件存在所以会执行下面代码     gcc -o test2.exe test2.o

这样写的限制:用一个Makefile同时编译多个.c文件并生成可执行文件需要添加一个伪可执行文件。makefile 默认只生成第一个可执行文件,所以可以用伪可执行文件,make 过程中并不生成 这个伪可执行文件,在如下代码中,all就是一个伪执行文件。

#makefile
CC=gcc
all:test1 test2
.PHONY:all

test2 :test2.o
        $(CC) -o $@ $<
test1 :test1.o
        $(CC) -o $@ $<
test2.o:test2.c
        $(CC) -o $@ -c $<
test1.o:test1.c
        $(CC) -o $@ -c $<

clean:
        rm -rf test1 test2 test1.o test2.o
        
.PHONY:all clean

make的一些选项:

1、-f

直接运行make命令会在当前文件夹下寻找makefile或者Makefile文件,你可以通过-f选项来改变这种默认特性

make -f my_makefile

make 命令会选择扫描 my_makefile 来代替 Makefile。

2、-C

你可以为 make 命令提供不同的目录路径,在寻找 Makefile 之前会切换目录的。这是一个目录,假设你就在当前目录下:

$ ls
file file2 frnd1.cpp

但是你想运行的 make 命令的 Makefile 文件保存在 ../make-dir/ 目录下,你可以这样做:

$ make -C ../make-dir/

 make 命令首先切到特定的目录下,在那执行,然后再切换回来。

3、-B

make -B 会强制编译所有的目标文件以及最终的执行文件。

make的语法可以参看:https://blog.csdn.net/qq_35451572/article/details/81092902

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐