unix cc编译过程

    1.编译并链接一个完全包含与一个源文件的C程序:
                cc program.c
     这条命令产生一个称为a.out的可执行程序。中间会产生一个名为program.o的目标文件,但它在链接过程完成后会被删除。
    2.编译并链接几个c源文件:
                cc main.c sort.c lookup.c
    当编译的源文件超过一个时,目标文件便不会被删除。这就允许你对程序进行修改后,只对那些进行过改动的源文件进行重新编译,如下一条命令所示。
    3.编译一个c源文件,并把它和现存的目标文件链接在一起:
                cc main.o lookup.o sort.c
    4.编译单个c源文件,并产生一个目标文件(本例中为program.o),以后再进行链接:
                cc -c program.c
    5.编译几个c源文件,并为每个文件产生一个目标文件:
                cc -c main.c sort.c lookup.c
    6.链接几个目标文件;
                cc main.o sort.o lookup.o
    上面那些可以产生可执行程序的命令均可以加上“-o name”这个选项,它可以使连接器把可执行程序保存在“name”文件中,而不是“a.out”。在缺省情况下,链接器在标准c函数库中查找,如果在编译时加上“-lname”标志,链接器就会同时在“name”的函数库中进行查找。这个选项应该出现在命令行的做后。
(摘自《c和指针》)

———————————————————————————————————————————————————————————————————————————————


多数UNIX平台都通过CC调用它们的C编译程序.除标准和CC以外,LINUX和FREEBSD还支持gcc. 基本的编译命令有以下几种:
1. -c 编译产生对象文件(*.obj)而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,
如:
$cc -c hello.c ===> hello.o
$cc hello.o


2. -o 允许用户指定输出文件名,
如:
$cc hello.c -o hello.o

$cc hello.c -o hello


3. -g 指明编译程序在编译的输出中应产生调试信息.这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.


4. -D 允许从编译程序命令行定义宏符号 一共有两种情况:一种是用-DMACRO,相当于在程序中使用#define MACRO,另一种是用-DMACRO=A,相当于程序中的#define MACRO A.如对下面这代码:
#ifdefine DEBUG
printf("debug message/n");
#endif 编译时可加上-DDEBUG参数,执行程序则打印出编译信息


5. -I 可指定查找include文件的其他位置.例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项
如下:
$cc -c -I/usr/local/include -I/opt/include hello.c此时目录搜索会按给出的次序进行.


6. -E 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析: $cc -c -E hello.c >cpp.out 此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何.


7. -o 优化选项, 这个选项不是标准的 -O和 -O1指定1级优化 -O2 指定2级优化 -O3 指定3级优化 -O0指定不优化
$cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!!


8. -Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!
$gcc -Wall hello.c

9. -L指定连接库的搜索目录,-l(小写L)指定连接库的名字 $gcc main.o -L/usr/lib -lqt -o hello 上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现.

原文地址:https://www.cnblogs.com/nosadness/p/5136312.html