1
热度 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进行一些编程的话,对编译器的编程语言选项的使用确实要简单了不少。