1.-c选项和-C选项:
-c(gcc选项):编译.c或汇编源文件,但是不作连接. 编译器输出对应于源文件的目标文件.
如:$(CC) -c ${CFLAGS} ${SRCS}
-C(makefile选项):-C的是make本身的内建命令选项,是给make程序用的 不是给cc用的。make 程序接受了 -C选项面在参数它自己先跳到 -C后面选项的目录中在解析Makefile执行编译
如:$(MAKE) -C ./${PLANTFORM}
2.$@,$^,$<,$+代表的意义:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
如:
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
$+: 与$^区别在于,$^输出时,会进行去重;$+完全按照原样输出,不进行任何处理。
如:
foo: foo1.bar foo2.bar foo2.barecho $+echo $^ foo1.bar:echo "foo1"foo2.bar: echo "foo2"foo3.bar:echo "foo3"
输出为:
foo1
foo2
foo1.bar foo2.bar foo2.bar
foo1.bar foo2.bar
“-w”或是“--print-directory”会在make的过程中输出一些信息,让你看到目前的工作目录。比如,如果我们的下级make目录是“/home/hchen/gnu/make”,如果我们使用“make -w”来执行,那么当进入该目录时,我们会看到:
make: Entering directory `/home/hchen/gnu/make'.
而在完成下层make后离开目录时,我们会看到:
make: Leaving directory `/home/hchen/gnu/make'
-O2选项,最大优化:gcc -O2 helloworld.c
产生一个经过最大优化的叫作a.out的可执行文件。
5.gcc选项-g
-g选项,产生供gdb调试用的可执行文件:gcc -g helloworld.c
产生一个叫作a.out的可执行文件,大小明显比只用-o选项编译汇编连接后的文件大。
6.gcc选项-Wall
-Wall选项,开启所有的警告