求教一个makefile文件的具体含义 20C

makefile文件内容如下:

CFLAGS=-O3 -mcpu=cortex-a8 -mfpu=neon -std=gnu99 -Wall -pedantic -Wno-long-long

all: check bench

debug:
@$(CC) $(CFLAGS) -DNORX_DEBUG -I. -o debug ../../utils/debug.c norx.c
@./debug
@rm debug

bench:
@$(CC) $(CFLAGS) -o bench ../../utils/bench.c norx.c caesar.c
@./bench
@rm bench

check:
@$(CC) $(CFLAGS) -I../ -o check ../../utils/check.c norx.c caesar.c
@./check
@rm check

.PHONY: check debug bench

求教此makefile文件具体的生效过程是什么,使用make命令后,是怎样进行编译链接的

4个回答

check生成,生成输出文件 check ,由 ../../utils/check.c norx.c caesar.c 编译链接后生成
bench 生成,输出文件是bench ,由../../utils/bench.c norx.c caesar.c编译链接后生成

make all
那么执行 all: 后的命令,这里是 check bench,那么这两个标签都会被使用

make check 生成 check ,执行后 调用rm check 删除check

make bench 生成 check ,执行后调用 rm bench 删除bench

make debug 则生成 debug 执行后也删除

make all 编译链接。一般就make一下,然后再make all一下,附带的ReadMe文档一般有写

其作用如下:

   **makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率**

首先,你这个makefile 要链接 -Wall -pedantic -Wno-long-long 这几个库,这个由makefile 自动链接,你后面编译的时候如果缺少库的话,可在些后面继续添加.
接下来会执行 make 后面接的参数,
1、make all,会生成 check 和 bench 这两个文件,makfile 会根据后面接的参数自动匹配标签;
check 标签 生成输出文件 check ,由 ../../utils/check.c norx.c caesar.c 编译链接后生成, ./check 是运行check程序 rm check 是删除check
bench 标签 生成输出文件 bench ,由../../utils/bench.c norx.c caesar.c编译链接后生成, ./bench 是运行bench程序 rm bench 是删除bench

2、也可以单独的进行 make 编译

make debug 是执行 @ ../../utils/debug.c norx.c 后,生成 debug,执行 ./debug 后,rm debug 删除 debug

make bench 是执行 @bench ../../utils/bench.c norx.c caesar.c 后,生成 bench,执行 ./bench 后,rm bench 删除 bench

make check 是执行 @check ../../utils/check.c norx.c caesar.c 后,生成 check,执行 ./check 后,rm check 删除 check

最后的 .PHONY: check debug bench 是 为了防止生成的执行文件有冲突,同时也可以提高 makefile 的执行效率

另外补充一下 @ 这个符号是 在 make 会把其要执行的命令行在命令执行前输出到屏幕上,这样我们可以实时看到执行过程

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
ubuntu16.04下驱动模块通信,make之后提示找不到头文件!!!具体看下面
2
如何将子目录.o合并单个.o,每个子目录.o合成可执行文件
2
makeFile configure 文件解析
2
关于Linux 链接数据库的问题
3
make: *** [abort-due-to-no-makefile] 错误 1
3
有没有人试过在自己工程里调用tensorflow C++ API
1
cmakelists如何修改文件拓展名?
3
问一下makefile文件什么意思
1
Makefile:48: recipe for target 'htpasswd' failed make[2]: *** [htpasswd] Error 1
0
makefile出错 Entering directory `/home/xxx/libtest/lib'
1
Warning: File `makefile' has modification time 1.6e+02 s in the future怎么解决?
2
c语言,语法没有任何问题,但是编译之后会自动弹出一个makefile.win的窗口,请问是为什么?
0
Dev-c++编译时报错,跳出makefile.win文件,显示第25行出现错误该怎么解决?
2
C工程include头文件带路径,如何通过makefile将不同路径下的头文件集合在一起?
0
hotspot实战中 GCC版本高导致的cannot find -lstdc++如何解决
2
Ubuntu配置caffe执行make all命令报错(各位大哥 救救孩子吧~~折腾一整天了)
0
使用cygwin配置交叉编译失败,提示无法执行二进制文件?(第一次配置,学网上很多的教程还是没解决)
1
安装python,make命令后出现*** No targets specified and no makefile found. Stop.。
2
怎样给.a文件瘦身?---小白求问
1
熟悉操作系统开发的大佬帮忙解答一下问题吧