C程序编译
gcc可接收处理多种文件,包括归档文件(.a),C语言源文件(.c),C++源文件(.C,.cc,.cxx),汇编语言源文件(.s),预处理输出文件(.i),目标代码(.o)
gcc [option] filelist
-c:只编译,不链接成可执行文件。编译器只是由输入的.c等为后缀的源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -g:产生调试器gdb所必需的符号信息,要对源代码进行调试,就必须在编译程序时加入这个选项 -O[level]:对程序进行优化编译,链接,采用这个选项,整个源代码会在编译,链接过程中进行优化处理,这样产生的可执行文件的执行效率较高,但是,编译、链接的速度就相应地要慢一些。数字越大优化程度越高。 -o output_filename sourcename:确定输出文件的名称为output_filename,如果不用output_filename,默认输出文件为a.out -pg:产生供代码剖析工具gprof使用的信息 -S:跳过汇编和链接阶段,保留编译产生的汇编代码(.s文件) -v:产生尽可能多的输出信息 -w:忽略警告信息 -W:产生比默认模式更多的警告信息 -ansi:强制ANSI标准 -l libfile:链接库文件 -m typeName:根据CPU类型优化代码
需要编译的文件可以放在option前,也可放在option后
gcc f1 f2 ... fN -o outputfile
一般而言,文件数量多时,采取将各源文件编译为目标文件的操作先,然后再链接形成可执行文件,如:
gcc -c f1.c gcc -c f2.c ... gcc -c fN.c #也可写成gcc -c f1.c f2.c ... fN.c gcc f1.o f2.o ... fN.o outputfile
如此,当某个文件发生修改时,可只编译该文件,再将所有文件链接,节省时间。
使用程序库时,需要用-l命令链接,如链接math.h
gcc f1.c -lm -o outputfile
make:处理模块化c程序
make [options] [target] [Macro Definition] -h 或 --help:输出帮助信息。 -d:输出大量调试信息 -n:只打印需要执行的命令而不执行,测试模式 -s:是一个用于静默执行Makefile的命令选项。它会在执行过程中不输出任何信息,包括命令的执行结果和错误信息。 -j 或 --jobs:指定并行执行的任务数,即同时编译的文件数。 -I 或 --include-dir:指定头文件的搜索路径。 -f 或 --file:指定使用的Makefile文件,可以多次使用来指定多个文件。在文件名不是makefile或Makefile时需要使用此参数。 -k 或 --keep-going:即使遇到错误,也继续执行后续的编译任务。
make语法规则:
目标文件列表:依赖文件列表
<Tab>命令列表
目标文件列表中文件之间用空格隔开,依赖文件列表亦然。命令列表用回车隔开用户命令,每条命令都需要以<Tab>命令起头
如果想要强制编译系统,可以在make命令前执行touch命令
编写的makefile文件中各命令的执行顺序由编译过程决定,与makefile中的书写顺序无关。
make支持宏替换,需在makefine顶端定义宏:
makefile macro_name = text 或 define macro_name text endef
其中,macro_name
是您为宏指定的名称,而text
是宏所代表的文本片段或命令。引用宏时采用$(macro_name)
宏使用参考
$