求教一个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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问