GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。 1objects = main...
#Makefile:CC:=gccCFLAGS:=-gsrc:=$(wildcard *.c)test3.cobj:=$(patsubst %.c,%.o,$(src)...
obj:=$(patsubst %.c,%.o,$(src)) main:$(obj)gcc-o main $(obj) .Phony:clean clean:rm*.o *~ 调用make编译,在终端得到输出结果如下: cc-c -o main.o main.ccc-c -o test1.o test1.ccc-c -o test2.o test2.ccc-c -o test3.o test3/test3.cgcc-o main main.o test1.o tes...
main.o等文件也有自己的依赖,它们分别依赖于不同的.c文件和.h文件,同样如果.c|.h文件更新,或者.o文件不存在,也会执行命令:生成.o文件。 edit称为target,是我们要生成的目标文件;edit后面的main.o...称之后prerequisites,是target依赖的条件;cc -o edit main.o...是生成目标所要执行的命令,称之为recipes,r...
test:main.o gcc -o test main.o main.o:main.c gcc -c main.c -o main.o clean: @rm -vf main.o test 二、Makefile的书写规则 1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙。下面总结了一些。 Makefile本质上来讲也是shell脚本,即每条command都是shell进程,运行完shell进程都会退出 假如/root# test: gcc -c main.c -o main.o gcc -c a.c -o a.o 这样输入make test,结果相当于两...
obj-m := test.o是指定模块名称是test.ko.如果只是由test.o,来编译成test.ko,那后面的module-objs := test.o最好省略(我觉得你这2句话写一起,估计编译会出错). 但是有时候,test.ko是由test.o file1.o file2.o这样多个.o文件编译成test.ko模块,那需要:obj-m := test.o module-objs := file1...
rm hello hello.o [root@localhost makefiletest]# ls hello.c Makefile 将文件Makefile修改为:*** hello:hello.c @gcc -c hello.c -o hello.o @gcc hello.o -o hello .PHONY:clean clean:@rm hello hello.o *** [root@localhost makefiletest]#...
你修改了一个规则,即:将目标文件链接成为可执行程序时指定了make的编译器的值为gcc〔gcc –o main ...〕,所以你调用make的时候,看到的是gcc。 当将源文件编译成为目标文件时,你并没有修改make的内建规则(默认编译器的值为cc),因此调用make的时候,输出的是cc。
hellomake: hellomake.o hellofunc.o $(CC) -o hellomake hellomake.o hellofunc.o $(CFLAGS) 改为: AA=gcc BB=-I. hellomake: hellomake.o hellofunc.o $(AA) -o hellomake hellomake.o hellofunc.o $(BB) 再执行make命令,毫无问题。