一般单个文件使用 gcc 来进行编译,但是如果文件多啦,想一次编译完成怎办呢?
一种解决方案是使用makefile文件,下面给出一个万能的文件格式:
Makefile
SOURCE = $(wildcard *.c)
TARGETS = $(patsubst %.c, %,$(SOURCE))
CC =gcc
CFLAGS = -Wall -g
all:$(TARGETS)
$(TARGETS):%:%.c
$(CC) $< $(CFLAGS) -o $@
.PHONY:clean all
clean:
-rm -rf $(TARGETS)
通过上述文件和.c文件一起存放在一个文件夹下,使用make命令即可生成可执行文件。使用make clean可以删除可执行文件。
上述代码解释:
wildcard 表示通配符,寻找到.c文件,也就是我们编写多c语言源代码。
patsubst 表示模式字符串替换,具体作用为目标文件名称为与c语言源文件同名的文件。
CC和CFALGS表示gcc命令和参数。gcc -Wall -g 输出警告和调试信息
$@ 表示目标文件 $< 第一个依赖文件 (其他指令可以参考其他博文)
.PHONY 这个比较有意思,表示伪目标,确保当存在clean文件的时候,也会执行这一句。
执行文件的时候,多半是要使用./a.out这种格式。但是cd ls这些命令为什么就不需要./标记呢?其实是PATH 路径的问题,我们自己写的程序没有被PATH包含,所以需要./来制定当前路径,如果不想输入./的话。使用下面多命令输入到当前teiminal
PATH=$PATH:.
表示当前shell的PATH已经包含了当前路径,就不再需要输入./这个符号啦。值得注意的是:此路径仅仅对当前shell有效哦。
又可以愉快的编写程序玩耍啦。