2010-01-14 12:48:35| 分类: linux|举报|字号 订阅
% 就会把 foobar.c 通过以上的步骤编译出来。如果你有多个文件要编译,只要输入 % 注意,语法检查就是──纯粹的检查语法。而不会检测你可能犯的任何逻辑错误。比如无限循环,或者是你想用一元排序却使用了冒泡排序。 cc 有很多选项,在帮助手册中都可以找到。这里列出了一些最重要的选项,并且有例子。 -o filename % 可执行文件是 a.out % % -g % -O 优化通常只在编译一个 release 版本的时候才被打开。 % 这会产生一个优化版本的 foobar 。 -O和 -O1指定1级优化 -O2 指定2级优化 -O3 指定3级优化 -O0指定不优化 $cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!! -I 可指定查找include文件的其他位置.例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项如下: $cc -c -I/usr/local/include -I/opt/include hello.c 此时目录搜索会按给出的次序进行. 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析: 此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何. -M 自动找寻源文件中包含的头文件,并生成一个依赖关系.于是由编译器自动生成的依赖关系,这样一来,你就不必再手动书写若干文件的依赖关系,而由编译器自动生成了。需要提醒一句的是,如果你使用GNU的C/C++编译器,你得用“-MM”参数,不然,“-M”参数会把一些标准库的头文件也包含进来。 允许从编译程序命令行定义宏符号 printf("debug message\n"); #endif 编译时可加上-DDEBUG参数,执行程序则打印出编译信息 下面的三个参数会迫使 cc 检查你的代码是否符合一些国际标准,经常被我们叫做 ANSI 标准,虽然严格的来说它是一个 ISO 标准。 -Wall -ansi -pedantic 没有这些选项,cc 能允许你按照标准使用一些非标准的扩展。有一些扩展非常有用,但不能与其他编译器兼容──实际上,这个标准的主要目的之一就是允许我们写出可以在任何系统上的由任何编译器编译的代码。这就叫做 可移植代码 通常来说,你应该让你的代码尽可能的可以移植。否则你就不得不完全重写你的代码以便能够在其他地方运行之──而且谁知道几年后你是否还会用它? % 这会在检查 foobar.c 对标准的兼容性以后产生一个 foobar 可执行文件。 -Ldirname $gcc main.o -L/usr/lib -lqt -o hello 指定连接库的搜索目录,-l(小写L)指定连接库的名字 上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现. -llibrary 最常见的情况就是当你编译一个使用了一些 C 中的数学函数的时候。不像大多数其他的平台,这些函数都不在 C 的标准库里面。你必须告诉编译器加 上这些库。 这个规则就是,如果库的名字叫做 libsomething .a ,你就必 须给 cc 这样的选项 -lsomething 。例如,数学库 叫做 libm.a ,因此你给 cc 的选 项就是 -lm 。一般情况下,我们要把这个选项放到命令行的 最后。 如果你要编译 C++ 代码,你需要 -lg++ ,或者 -lstdc++ 如果你使用的是 FreeBSD 2.2 或者更高版本,来 连接 C++ 库。或者,你可以运行 c++ 而不是 cc 来编译 C++ 代码。在 FreeBSD 上, c++ 也可以通过运行 g++ 来唤醒。 % 对 FreeBSD 2.2 或者更高的版本 |