编译器有一些操控选项,这些选项是供咱们来操控编译器的,不像前几篇文章说到的那些选项那样,是编译器用来操控编译成果的。下面咱们就来看看咱们能够运用的操控编译器的选项有哪些:
表1 编译器的操控选项
操控选项 |
别号 |
操控作用 |
–compile_only |
-c |
操控编译器使得它只编译,不链接。 |
–help |
-h |
输出编译器运用的优化、操控等选项信息。它的后边能够加一些更清晰的选项或许名词,例如–help debug就能够输出关于debug的选项的信息。 |
–run_linker |
-z |
使能编译之后的链接功用,与榜首行的-c相对。-c与-z一起存在时,-c起作用,-z不起作用。 |
–skip_assembler |
-n |
只编译,可是也不发生汇编文件。这样做的意图首要是为了快速验证程序有没有根本的语法过错等。-n选项和-z一起存在的时分,-n起作用,-z不起作用。从流程上讲不难了解,汇编等作业不完结,链接器没有作业方针也无法完结链接。 |
就编译器自身来说,它只需读取C、C++、汇编等文件进行处理就完结任务了,所以编译器的操控选项并不多,一般状况下一个-z选项就满足咱们完结从编译程序到生成方针的编译器操控作用了。相比较而言,C、C++这些言语自身就杂乱的多了,而且由于有很多个版别的存在,不免有一些小紊乱的存在,所以编译器里与编程言语自身相关的选项就显得特别多,以便咱们来对言语的特性等进行正确运用,下面就看看编译器里与编程言语有关的选项:
表2 编译器的编程言语选项
言语选项 |
别号 |
操控作用 |
–cpp_default |
-fg |
告诉编译器把一切的.c文件也当作C++源程序看待。假如不运用这个默许选项的话,也能够别离指定不同后缀名的文件,例如–asm_file=filename,–c_file=filename,-cpp_file=filename,–obj_file=filename。举例说明,现在咱们有个文件叫file.s,那么运用–c_file=file.s的话能使得编译器依照处理C文件的方法处理file.s。 |
–embedded_cpp |
-pe |
使能嵌入式的C++形式。嵌入式C++是规范的C++的一个子集,由NEC, Hitachi, Fujitsu,以及 Toshiba等几个公司在十几年前拟定,移除了模版、反常处理、运转时类型、新式C++转型、可变要害字、多重承继、虚拟承继等C++特性。 |
–exceptions |
|
使能规范C++言语中的反常处理。默许状况下编译器是不使能C++的反常处理的,假如启用了这个选项的话,则一切的C++源程序都在启用了反常处理的状况下进行编译。 |
–float_operations_allowed ={none|all|32|64} |
|
约束浮点类型的操作,包含彻底制止、答应32位浮点类型运转、答应64位浮点类型运转和一起答应32位与64位的浮点运算被编译。现在C28x的FPU不支撑64位浮点的硬件运算,假如非要运用的话,需求编译器调用相关的算法库在编译时进行支撑,功率不高。 |
–gcc |
|
GCC供给了在规范C/C++里边没有的一些特性,在嵌入式体系的开发中运用比较广泛,所以编译器也供给了对它的支撑。关于GCC的特色,能够参阅http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions |
–gen_acp_raw |
-pl |
运用这个选项能够使得编译器在编译时输出原始列表文件,然后更好地协助咱们了解编译的进程。这个原始列表文件里边包含了源程序里的行信息、头文件的切入和切出信息、确诊信息、穿插编译时预处理的源文件中相关句子的信息等。这个文件的内容比较具体,有爱好的网友能够启用这个选项之后编译看看。它包含了一些标识符,以协助咱们更快定位和了解相关的信息,包含: N:对应的源程序的行数 X:源程序中的扩展行数,穿插编译时会遇到。 S:越过的行数,例如运用#if这样的预编译指令时,判别条件为假对应的不会被编译的行。 L:源程序中跳转对应的行数,例如调用一个头文件中界说的函数,或许从头文件中的函数界说回来。 E:过错 F:要害过错 R:提示 W:正告 |
–gen_acp_xref |
-px |
输出穿插参阅的信息列表,包含文件名、行数、列数,穿插引证发生的声明、修正、调用等信息。 |
–keep_unneeded_statics |
|
保存界说了可是违反运用的静态变量,例如这些变量是咱们出于调试意图设置的,所以不期望被编译器给清除去。这个选项不能阻挠编译器删去未被运用的静态函数。 |
–kr_compatible |
-pk |
坚持与K&R版别C言语的兼容性,只能作用于C程序上,对C++程序无效。 |
–multibyte_chars |
-pc |
答应在注释、字符串常量和字符常量中运用多字节字符。多字节字符和Unicode是相对的,Unicode字符都运用两个字节编码的编码模,多字节字符则是可变的。这个选项有时分是直观的,例如用英语以外的其它言语编写的注释,再翻开的时分在CCS里边或许就全变成?????这样的了。 |
–no_inlining |
-pi |
制止编译器对函数进行内联。可是在启用了-O3编译器优化选项的状况下,编译器仍然会履行主动内联功用。 |
–no_intrinsics |
-pn |
制止运用编译器内建的intrinsics函数。这些函数一般是汇编言语写成的,例如在C28x上调用IQMath库里的_IQMpy编程时,编程发生的汇编言语就能够直接运用内建的__qmpy32(a32, b32, q)完结对数学表的调用。 |
–program_level_compile |
-pm |
启用程序等级的优化。在这种优化条件下,编译器会把一切的源程序集合到一个模块中进行编译,这样它就能清楚了解一切的代码的来龙去脉,然后更好地完结程序的优化。例如,一个有内容的函数既没有被main()函数调用,也没有被其它函数调用的话,编译器就把它优化掉了。 |
–relaxed_ansi |
-pr |
运用编译器的“松懈”形式。在规范ISO C形式下,大部分语法上的违规会被当作过错输出,然后使得咱们的编译无法继续下去。假如咱们有时需求运用这样的用法的话,就运用松懈形式,使得这些违规被作为正告信息输出,虽然有正告,可是不会阻碍程序的编译。当然咱们要做的验证和承认咱们的程序的确达到了咱们的预期功用。 |
–rtti |
-rtti |
运用C++的运转时类型。 |
–static_template_instantiation |
|
运用内部衔接例化一切的模版。 |
–strict_ansi |
-ps |
运用严厉的ANSI/ISO C/C++形式,这种形式与K&R版别的C是不兼容的。 |
从表2里也能够看出,大部分特性是与C++编程休戚相关的,假如只是运用C进行一些编程的话,对编译器的编程言语选项的运用的确要简略了不少。