cpp
除特殊规定外,或以=结束的选项,该选项的参数可以直接出现在选项后或者两者之间以空格隔开,例如:-Ifoo与-I foo相同。
由于有的选项有多个字母组成,故多个单个字母选项不能直接接在一起。
-D name:预定义name为一个宏,且宏定义为1。
-D name=definition:同上,但是当我们定义宏函数时,需要写成如下形式:
-D ‘name(args…)=definition’。
-U name:取消宏定义(包括内建或以-D option形式建立的宏)。
-undef:取消system-specific或Gcc-specific预定义的宏,但是我们自己定义的宏仍有效。
-I dir:将dir加入搜索头文件的目录中。而-I- 一个一个的列出搜索头文件的目录,若-I在前,则-I只搜索#include”file”,若-I在后则搜索全部。
-nostdic:不搜索系统头文件目录。
-Wall:开启所有警告(包含-Wcomment、-Wtrigraphs、-Wmultichar以及由于整型提升导致#if表达式值发生变化时的警告信息)。
-Wcomment:当/*出现在/*……*/中或者//出现在/*……*/。
-Wtrigraphs:三字符序列(查阅C专家编程);若要使得trigraph conversion无警告,但是其它警告仍有效,请使用—trigraphs -Wall -Wno-trigraphs
-Wtraditional:不符合ISO C则发出警告
-Wundef:若#if后的directive没有定义则发出警告,且认为directive为0
-Wunused-macros:当定义的宏未使用时则发出警告。所谓使用是指:宏被用于宏展开或用于测试。内建宏、命令行上定义的宏及在文件中定义的宏不会不用也不会发出警告。若宏确实被使用了,但是宏却被在跳过的条件块中被使用,则cpp也会被报告其未被使用。
-Wendif-labels:在#endif后还有文本字符则发出警告,因此最好没有。
-Werror:将所有的warning当成错误看待,在严格要求的情形下可这样使用。
-Wsystem-headers:默认为关闭,当我们设计系统库时最好开启。
-w:关闭所有的warning。
-pedantic:执行c标准中的所有强制性检查。
-pedantic-errors:将所有被强制性检查出有问题的都以错误形式列出。
-M:产生一个规则来描述源文件所对应目标文件的依赖文件,但是并没有生成将依赖文件执行变为目标文件的命令(执行过程中默认使用了-w –E)。
-MM:可能会将系统头文件(<>)或包含头文件(””)不加入依赖文件列表中,而只将命令行中的加入。
-MF:指定生成依赖关系的文件名。
-MG:假定丢失的头文件是自动生成的头文件,将它们加入依赖文件中而不会产生错误,该文件直接取自#include指示符中的文件名而没有任何其它路径。
-MP:不仅目标文件有相应的依赖文件,而且依赖文件列表中的文件也称为目标文件。当我们删除头文件而没有更新makefile文件时这会提示我们哪里出错了。
-MT target:例如:
-MT ‘$(objpfx)foo.o’得到:
$(objpfx)foo.o:foo.c
-MQ target:例如:
-MQ ‘$(objpfx)foo.o’得到:
$$(objpfx)foo.o:foo.c
-MD file:相当于-M –MF file(此过程中若为明显指定则不包含-E)
若后加-o XXXX形成file的目标依赖文件名为:XXXX.d
若没有加-o XXXX,则形成目标依赖文件名为:file.d
若加入-E:
有-o:指定依赖文件列表中可以含有什么
-xc、-xc++、-x objective-c、-x assembler-with-cpp指定目标语言,若未指定,则识别.c、.cc、.m、.s等等,当不能识别时则当成C文件。
-dM:touch foo.h;cpp –dM foo.h可以看到内建以及系统宏。
cpp 与 make依赖关系的生成:
一、
1 #cpp -M test.c -MF makfile0
2 test.o: test.c show.h /usr/include/stdio.h /usr/include/features.h \
3 /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
4 /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
5 /usr/include/gnu/stubs-64.h \
6 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stddef.h \
7 /usr/include/bits/types.h /usr/include/bits/typesizes.h \
8 /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
9 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stdarg.h \
10 /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
二、
1 #cpp -MM test.c -MF makefile1
2 test.o: test.c show.h
三、
1 #cpp -M -MP test.c -MF makefile2
2 test.o: test.c show.h /usr/include/stdio.h /usr/include/features.h \
3 /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
4 /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
5 /usr/include/gnu/stubs-64.h \
6 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stddef.h \
7 /usr/include/bits/types.h /usr/include/bits/typesizes.h \
8 /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
9 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stdarg.h \
10 /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
11
12 show.h:
13
14 /usr/include/stdio.h:
15
16 /usr/include/features.h:
17
18 /usr/include/bits/predefs.h:
19
20 /usr/include/sys/cdefs.h:
21
22 /usr/include/bits/wordsize.h:
23
24 /usr/include/gnu/stubs.h:
25
26 /usr/include/gnu/stubs-64.h:
27
28 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stddef.h:
29
30 /usr/include/bits/types.h:
31
32 /usr/include/bits/typesizes.h:
33
34 /usr/include/libio.h:
35
36 /usr/include/_G_config.h:
37
38 /usr/include/wchar.h:
39
40 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include/stdarg.h:
41
42 /usr/include/bits/stdio_lim.h:
43
44 /usr/include/bits/sys_errlist.h:
四、
1 #cpp -MM -MP test.c -MF makefile3
2 test.o: test.c show.h
3
4 show.h: