image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
示例2
文件夹中的各个文件image.png
另一种可行方式
先看个错误示范
错误示范
错误提示
目标tcpclient的commands需要在当前文件夹中找到tcpclient.c和cJSON.o这两个文件,如果找不到,那就会报错。
正确的方式
image.png从这个可以看出,目标tcpclient写了先决条件cJSON,那就先去找有没有名叫cJSON的目标,找到了就先执行它。然后就先得到了cJSON.o这个文件,使得目标tcpclient的commands中的gcc命令得以正确执行。
可见先决条件是指定了在Makefile文件中的其他target,而不是指的什么文件。先决条件==先执行的目标。
all这个可有可无,起到一个总结作用。all是总目标,后面跟的小目标可以认为是先决条件。
示例3——大量文件在一个文件夹,用all很方便
image.pngMakefile文件内容
all: udpclient udpclient_errjson udpclient_truejson udpclient_originate_2call udpclient1 udpserver udpserver1 json_creat1 json_parse1 json_creat2 json_parse2
udpclient:
gcc -o udpclient udpclient.c cJSON.c -lm
udpclient_errjson:
gcc -o udpclient_errjson udpclient_errjson.c cJSON.c -lm
udpclient_truejson:
gcc -o udpclient_truejson udpclient_truejson.c cJSON.c -lm
udpclient_originate_2call:
gcc -o udpclient_originate_2call udpclient_originate_2call.c cJSON.c -lm
udpclient1:
gcc -o udpclient1 udpclient1.c
udpserver:
gcc -o udpserver udpserver.c
udpserver1:
gcc -o udpserver1 udpserver1.c
json_creat1:
gcc -o json_creat1 json_creat1.c cJSON.c -lm
json_creat2:
gcc -o json_creat2 json_creat2.c cJSON.c -lm
json_parse1:
gcc -o json_parse1 json_parse1.c cJSON.c -lm
json_parse2:
gcc -o json_parse2 json_parse2.c cJSON.c -lm -std=c99
- 像这种编译多个目标的,如果不用all把后面的所有目标归纳起来(去掉第一行),那么将只会编译第一个目标udpclient,而后面的那些将被忽略。由此可见all的作用。
- 一种优化方式:不将cJSON.c文件重复编译那么多次,而是先设定一个目标编译出一个cJSON.o,然后让其他目标去使用这个目标作为先决条件。
网友评论