当前位置: 技术问答>linux和unix
makefile只执行到一半,就不执行,怎么回事?
来源: 互联网 发布时间:2016-11-27
本文导语: main.o : factorial.h main.c gcc -c main.c factorial.o : factorial.c factorial.h gcc -c factorial.c all:main.o factorial.o gcc -o test main.o factorial.o clean: rm -fr *.o test 只执行gcc -c main.c,生成main.o文件。不执行gcc -c factorial.c...
main.o : factorial.h main.c
gcc -c main.c
factorial.o : factorial.c factorial.h
gcc -c factorial.c
all:main.o factorial.o
gcc -o test main.o factorial.o
clean:
rm -fr *.o test
只执行gcc -c main.c,生成main.o文件。不执行gcc -c factorial.c。
另外,如果将
factorial.o : factorial.c factorial.h
gcc -c factorial.c
放在文件的最前面,则只执行gcc -c factorial.c。
怎么回事,谢谢。编译没有错误。
gcc -c main.c
factorial.o : factorial.c factorial.h
gcc -c factorial.c
all:main.o factorial.o
gcc -o test main.o factorial.o
clean:
rm -fr *.o test
只执行gcc -c main.c,生成main.o文件。不执行gcc -c factorial.c。
另外,如果将
factorial.o : factorial.c factorial.h
gcc -c factorial.c
放在文件的最前面,则只执行gcc -c factorial.c。
怎么回事,谢谢。编译没有错误。
|
按照makefile的规则,编译总是默认第一个目标和目标依赖,那么
root#make # 按照楼主的文件,这样只会编译main.o
root#make all # 这样才会编译all,从而编译所有,如果楼主只想make,要将all放到最前边
root#make clean # 删除目标文件
all:main.o factorial.o
gcc -o test main.o factorial.o # jernymy 此处要用tab
main.o : factorial.h main.c
gcc -c main.c # jernymy 此处要用tab
factorial.o : factorial.c factorial.h
gcc -c factorial.c # jernymy 此处要用tab
clean:
rm -fr *.o test # jernymy 此处要用tab
root#make # 按照楼主的文件,这样只会编译main.o
root#make all # 这样才会编译all,从而编译所有,如果楼主只想make,要将all放到最前边
root#make clean # 删除目标文件
all:main.o factorial.o
gcc -o test main.o factorial.o # jernymy 此处要用tab
main.o : factorial.h main.c
gcc -c main.c # jernymy 此处要用tab
factorial.o : factorial.c factorial.h
gcc -c factorial.c # jernymy 此处要用tab
clean:
rm -fr *.o test # jernymy 此处要用tab
|
all:main.o factorial.o
gcc -o test main.o factorial.o
把这个放在最前面试试
gcc -o test main.o factorial.o
把这个放在最前面试试
|
makefile不是按照顺序执行的,它只执行第一个目标和第一个目标所依赖的目标;
|
可以定义all:为伪命令,然后make all编译,或者按照楼上说的方法操作
|
up
|
Makefile只生成第一个目标,当然,要是想一次生成多个目标,可以
.PHONY:all AA BB
all:AA BB
......
|
正解