Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

XCC使用手册

概览

xcc [-c|-S|-E] [-g] [-O<level>]
[-W<warn>...]
[-I<dir>...] [-L<dir>...]
[-D<macro>[=<defn>]]
[-f<option>...]
[-target=<platform>]
[-o <outfile>] infile

仅在此列出了最有用的选项;有关其余选项,请参见下文。

功能描述

XCC是专门设计来类似于GCC,并且模仿了它的许多行为。它实际上是一个工具集的封装器,目的是为了简化这些工具的使用流程。这些工具负责完成预处理、编译(包括对C/C++和XC的编译)、汇编以及“映射”等步骤。虽然这些工具可以单独使用,但通过XCC可以更加便捷地使用它们。

XCC编译器在执行编译过程时,通常会完成所有必要的步骤。它的前三个步骤与GCC相似,都是针对单个源文件进行操作,以生成相应的目标文件。然而,“映射”步骤则有所不同,它不是为单一处理器生成一个可执行文件,而是多次调用链接器,为每个处理器生成各自的可执行文件。此外,这一过程还包括自动生成源代码、编译这些代码,以及进一步多次调用链接器。所有这些步骤最终生成一个XE文件,这个文件内含有多个可执行文件,用于不同的处理器。

选项如 -c-S-E 可以阻止XCC一次运行所有步骤,而是生成中间输出。

在执行任何步骤时,必须明确指定一个符合XN规范的平台。这可以通过设置环境变量XCC_DEFAULT_TARGET、使用命令行参数-target来完成,或者更推荐的做法是,将其作为输入文件之一进行指定。

在程序编译期间,编译器会生成一个临时头文件,名为 platform.h ,其中包含由目标 XN 文件定义的变量和宏定义。

  • 变量声明为 tileref 类型(请参见声明)。

  • 端口名称的宏定义(请参见端口)。

许多选项会被作为参数直接传递给执行处理步骤的工具。例如,某些选项直接影响编译器或链接器的行为。

大多数情况下,选项的使用顺序并不重要。但当您使用多个相同类型的选项时,顺序很重要;例如,如果您多次指定 -L ,则按指定顺序搜索目录。在其他情况下,例如使用 -O 时,重复使用将导致最右边的使用优先。

许多选项都有负面形式(例如, -fno-<option> )。

选项和其参数之间允许有空格。

常规选项

-x <language>

覆盖以下输入文件的默认处理方式。此选项适用于下一个 -x 选项之前的所有输入文件。语言的支持值为:

  • xc
  • c
  • c++
  • assembler
  • assembler-with-cpp
  • xn
  • xscope
  • none (关闭语言规范)

输入文件的默认处理方式由它们的后缀决定:

扩展名文件类型是否由XCC预处理
.xcXC 源代码
.cC 源代码
.cppCPP 源代码(为了兼容性,扩展名 cccpc++Ccxx 也可以被识别)
.S汇编代码
.xscopeXScope 配置文件
.xnXCore 网络描述
.xiXC 源码
.iC 源码
.iiC++ 源码
.s汇编代码
其他需要给到链接器的 .o 目标文件
可被XCC工具识别的文件后缀以及它们的含义

-std=<standard>

指定以下输入的 C 或 C++ 文件的语言变体。 <standard> 的支持的参数值为:

c89 ISO C89标准

gnu89

​ 带有GNU扩展的ISO C89

c99

​ ISO C99标准

gnu99

​ ISO C99与GNU扩展(C程序的默认选项)

c++98

​ ISO C++ (1998)

gnu++98

​ ISO C++(1998)带有GNU扩展(C++程序的默认选项)

-fsubword-select

在XC中,允许选择通道输入,其中目标变量的大小小于32位。

这是基于XS1-L设备的目标的默认设置。对于基于XS1-G设备的目标,这不是默认设置。有关详细信息,请参见通道通信。

-target=<platform>

为了方便地指定一个预先设置好的目标平台,需要在platform.xn文件中定义平台配置。系统将在XCC_TARGET_PATH 环境变量指定的路径中查找该配置文件。

由于目标平台可能会不受控制地发生变化,因此不建议在长期维护的项目中使用这一选项。最佳做法是通过定义并明确提供一个目标平台文件作为xcc的输入文件之一。例如:

xcc my_target.xn main.c

-foverlay

开启内存覆盖功能支持。作为覆盖根的函数会被放置在外部存储器中,并且会根据运行时的需求动态加载。编译和链接时都需要指定此选项。同时,应用程序中需要包含一个用于覆盖的运行时环境。使用 -foverlay=flash 来启用。

-foverlay=flash

在闪存覆盖运行时中启用内存覆盖链接支持。覆盖仅在从闪存引导的tile上启用。

-foverlay=syscall

在系统调用覆盖层运行时中启用内存覆盖链接支持。覆盖层在所有tile上启用。使用系统调用从主机机器加载覆盖层。

-fxscope[=link|uart]

使用 xSCOPE,对代码进行跟踪(默认使用xlink)。目标的 XN 文件必须包含 xSCOPE 链接。编译和链接时应传递该选项。

-fcmdline-buffer-bytes=<n>

添加一个大小为<n>字节的缓冲区,用于保存命令行参数。

-pass-exit-codes

返回编译的任何阶段产生的数值最高的错误代码,而不是简单的成功(0)或失败(1)。(默认情况下,如果编译器的任何阶段返回非成功,XCC返回1,否则返回0)

-c

编译或汇编源文件,为每个源文件生成一个目标文件,但不进行链接/映射。默认情况下,目标文件名由将源文件后缀替换为.o来形成(例如,*a*.c生成*a*.o)。

-S

仅在编译完成后停止,为每个非汇编输入文件生成一个汇编代码文件。默认情况下,汇编文件名由将源文件后缀替换为.s来形成。

不需要编译的输入文件将被忽略。

-E

仅对源文件进行预处理,将预处理后的源代码输出到标准输出。

不需要预处理的输入文件将被忽略。

-o <file>

将输出放置在file中。

如果未指定-o,可执行文件将放置在a.xe中,*source*.suffix的目标文件将放置在*source*.o中,其汇编代码文件将放置在*source*.s中,所有经过预处理的C/C++/XC源代码将输出到标准输出。

-v

在标准错误上打印编译的每个阶段执行的命令。还会打印XCC、预处理器和编译器本身的版本号。

-###

-v相同,只是不执行命令,并且将所有命令参数加上引号。

--help

打印支持的命令行选项的描述。如果还指定了-v,则--help也会传递给XCC调用的子进程。

--version

显示版本号和版权信息。

-save-temps

将中间文件保存到当前目录。在可能的情况下,文件的命名基于源文件。生成的platform.h文件总是使用相同的名称写入,因此应避免使用此选项进行并行构建。

此选项不会传递给xmap;如果需要此行为,请参阅-Xmapper

警告选项

许多特定的警告可以通过以-W开头的选项进行控制。以下每个选项都有一个以-Wno-开头的负形式,用于关闭警告。

-fsyntax-only

该选项仅用于检查代码的语法错误,检查完毕后程序将退出。

-w

该选项用于关闭所有警告信息。

-Wbidirectional-buffered-port

如果双向缓冲端口没有明确指定输入(in)或输出(out),编译器将发出警告。此警告默认是开启的。

-Wchar-subscripts

当数组下标使用char类型时,编译器将发出警告。

-Wcomment

如果在/*注释内部出现了/*序列,或者在//注释中出现了反斜杠后跟换行符,编译器将发出警告。这是默认行为。

-Wimplicit-int

如果声明中未指定类型,编译器将发出警告。在C语言中,对于没有指定返回类型的函数声明也会发出警告。

-Wmain

如果main函数的类型不是具有外部链接且返回int的函数,编译器将发出警告。在XC语言中,如果main函数不接受零个参数,也会发出警告。在C语言中,如果main函数既不接受零个参数,也不接受两个适当类型的参数,同样会发出警告。

-Wmissing-braces

如果聚合类型或联合类型的初始化器没有被完全用大括号包围,编译器将发出警告。

-Wparentheses

如果在需要真值的上下文中省略了括号,尤其是在有赋值操作的情况下,或者使用了优先级可能引起混淆的嵌套操作符,编译器将发出警告。

-Wreturn-type

如果函数的定义中返回类型默认为int,或者在返回类型非void的函数中的return语句没有返回任何值,编译器将发出警告。

-Wswitch-default

如果switch语句没有default情况,编译器将发出警告。

-Wswitch-fallthrough

(仅限XC语言)如果在switch语句的某个case中至少包含一个语句,并且控制流可能会继续执行到下一个case,编译器将发出警告。

-Wtiming

如果未满足时序约束,则发出警告。这是默认设置。

-Wtiming-syntax

警告时序脚本中的无效语法。这是默认设置。

-Wunused-function

如果声明了静态函数但未定义,或者未使用非内联静态函数,则发出警告。

-Wunused-parameter

除了声明之外,如果函数参数未使用,则发出警告。

-Wunused-variable

除了声明之外,如果局部变量或非常量静态变量未使用,则发出警告。

-Wunused

-Wunused-function-Wunused-variable-Wno-unused-parameter相同。

-Wall

打开所有上述-W选项。

以下-W...选项不被-Wall所隐含。

-Wextra, -W

对于以下情况,编译器将输出额外的警告信息:

  • 函数既可以返回值,也可以不返回值(仅适用于C和C++语言)。
  • 如果表达式语句或逗号表达式的左侧没有产生副作用,将会发出警告。可以通过将未使用的表达式转换为void来抑制这个警告(仅适用于C和C++语言)。
  • 当无符号数与零进行<<=比较时会发出警告。
  • 如果声明中的存储类说明符如static不是首先出现的,将会发出警告(仅适用于C和C++语言)。
  • 当出现x<=y<=z这样的比较时会发出警告(仅适用于XC语言)。
  • 如果函数的返回类型包含了不必要的限定符,如const,将会发出警告。
  • 如果指定了-Wall-Wunused,未使用的参数将会触发警告。
  • 有符号值与无符号值之间的比较可能在有符号值转换为无符号值时产生错误结果,除非指定了-Wno-sign-compare,否则会发出警告。
  • 如果聚合类型的初始化器没有初始化所有成员,将会发出警告。
  • 在使用指定初始化器时,如果一个已初始化且无副作用的字段被覆盖,将会发出警告(仅适用于C和C++语言)。
  • 在K&R风格的函数中,如果函数参数没有声明类型说明符,将会发出警告(仅适用于C和C++语言)。
  • 如果在ifelse语句中出现了空的执行体,将会发出警告(仅适用于C和C++语言)。
  • 如果指针与整数零进行<<=>>=比较,将会发出警告(仅适用于C和C++语言)。
  • 如果枚举类型和非枚举类型同时出现在条件表达式中,将会发出警告(仅适用于C++语言)。
  • 如果非静态引用或非静态const枚举类型和非枚举类型同时出现在条件表达式中,将会发出警告(仅适用于C++语言)。
  • 如果存在模糊的虚基类,将会发出警告(仅适用于C++语言)。
  • 如果对声明为register的数组进行下标访问,将会发出警告(仅适用于C++语言)。
  • 如果对声明为register的变量取地址,将会发出警告(仅适用于C++语言)。
  • 如果在派生类的复制构造函数中没有初始化基类,将会发出警告(仅适用于C++语言)。

-Wconversion

如果负整数常量表达式隐式转换为无符号类型,则发出警告。

-Wdiv-by-zero

警告编译时整数除以零。这是默认设置。

-Wfloat-equal

如果在等式比较中使用浮点值,则发出警告。

-Wlarger-than-<len>

如果定义了大于长度为len字节的对象,则发出警告。

-Wpadded

如果结构体包含填充,则发出警告。(可以通过重新排列结构体的字段来减少填充,从而使结构体更小。)

-Wreinterpret-alignment

当重新解释转换导致更大的对齐时发出警告。

-Wshadow

如果局部变量遮蔽另一个局部变量、参数或全局变量,或者如果内置函数被遮蔽,则发出警告。

#include <stdio.h>

int main() {
int x = 5;
{
int x = 10; // 遮蔽了外部的 x
printf("%d\n", x); // 输出 10
}
printf("%d\n", x); // 输出 5
return 0;
}

-Wsign-compare

当有符号与无符号数值进行比较,且在有符号数值转换为无符号数值的过程中可能导致结果不正确时(将有符号值转换为无符号值),该选项会发出警告。

-Wsystem-headers

该选项用于打印系统头文件中发现的结构的警告信息。这不是默认激活的选项。有关详细信息,请参阅目录选项部分。

-Wundef

如果在#if指令中使用了未定义的宏,该选项会发出警告。

-Werror

将所有警告视为错误。

-Werror=<option>

该参数将特定的警告信息转化为错误信息。这里的<选项>应当是编译器的某个可以使用-W前缀的警告选项。

默认情况下,编译器会设置 -Werror=timing-syntax 标志。这意味着,将这个特定的定时语法警告转化为错误,同时也会把相关的定时警告(-Wtiming)视为错误,两者效果是相通的。

调试选项

-g

生成调试信息。

-fresource-checks

在可执行文件中生成代码,如果资源分配失败,则会触发陷阱。这样可以尽早检测到资源错误。

-fverbose-asm

在中间汇编文件中以注释的形式生成额外的编译信息。

-dumpmachine

打印目标机器并退出。

-dumpversion

打印编译器版本并退出。

-print-multi-lib

打印从多库目录名称到启用它们的编译器开关的映射。目录名称与开关之间用“;”分隔,每个开关以“@”而不是“-”开头,多个开关之间没有空格。

-print-targets

列出通过XCC_TARGET_PATH找到的目标平台(XN文件),排除名称为.deprecated的文件夹中的平台。

-print-boards

-print-targets相同,但仅列出Type元素设置为“Board”的目标平台。

优化选项

打开优化选项使编译器尝试在编译时间和调试程序的能力方面改善性能和/或代码大小。

-O0

不进行优化。这是默认设置。

-O, -O1

进行优化。尝试减少执行时间和代码大小,而不执行需要大量编译时间的优化。

-O2

更多地进行优化。这些优化不涉及空间和速度之间的权衡。

-O3

更进一步进行优化。这些优化可能涉及空间和速度之间的权衡;高性能优先于小代码大小。

-Os

优化以获得最小的代码大小。

-fschedule

尝试重新排序指令以提高性能。这在任何优化级别下都不是默认设置。

-funroll-loops

展开迭代次数较少的循环。在-O2及以上级别启用。

-finline-functions

将简单函数集成到调用者中。在-O2及以上级别以及-Os级别启用。

预处理器选项

以下选项控制预处理器。

-E

仅进行预处理,然后退出。

-D <name>

将name预定义为宏,并定义为1。

-D <name=definition>

对definition的内容进行标记化和预处理,就像它出现在#define指令中一样。

-U <name>

删除先前对name的定义。-D-U选项按照命令行中给定的顺序进行处理。

-MD

将适用于make的规则输出到文件中,描述源文件的依赖关系。依赖文件的默认名称基于是否指定了-o选项。如果指定了-o,则文件名是-o参数的基本名称加上后缀.d。如果未指定-o,则文件名是输入文件的基本名称加上后缀.d。可以使用-MF覆盖文件的名称。

-MMD

-MD相同,只是忽略对系统头文件的依赖。

-MF <file>

将依赖信息写入file

-MP

为源文件的每个依赖项生成虚拟目标。每个虚拟目标都不依赖任何内容。这些虚拟规则解决了如果删除头文件而不更新Makefile以匹配时make产生的错误。

-MT <file>

指定依赖关系生成的规则的目标。

映射器选项

以下选项控制映射器及其链接器。

-l <library>

在链接时搜索库library。链接器按照指定的顺序搜索和处理库和目标文件。实际搜索的库名称是lib*library*.a。搜索的目录包括使用-L指定的任何目录。库是存档文件,其成员是目标文件。链接器扫描存档文件以查找定义了已引用但尚未定义的符号的成员。

-nostartfiles

不与系统启动文件进行链接。

-nodefaultlibs

不与系统库进行链接。

-nostdlib

不与系统启动文件或系统库进行链接。

-s

从可执行文件中删除所有符号表和重定位信息。

-default-clkblk <clk>

clk作为默认时钟块。时钟块可以通过<xs1.h>中的名称或资源编号来指定。启动代码打开默认时钟块,将其配置为使用参考时钟进行时钟,并且没有除法,并将其设置为运行状态。XC中声明的端口最初连接到默认时钟块。如果未指定此选项,则默认时钟块设置为XS1_CLKBLK_REF

-Wm,<option>

option作为选项传递给链接器/映射器。如果option包含逗号,则在逗号处将其拆分为多个选项。要查看完整的高级映射器选项集,请键入xmap --help

-Xmapper <option>

option作为选项传递给链接器/映射器。要传递需要参数的选项,请使用-Xmapper两次。

-report

打印资源使用情况的摘要。

目录选项

以下选项指定要搜索头文件和库的目录。

-I <dir>

dir添加到要搜索头文件的目录列表中。

-isystem <dir>

在指定了-I选项后,搜索dir以获取头文件。将其标记为系统目录。编译器会对系统目录中的头文件抑制警告。

-iquote <dir>

仅在所有由-I指定的目录之前,以及在系统目录之前,搜索dir以获取使用#include "file"(而不是#include <file>)请求的头文件。

-L <dir>

dir添加到要搜索的目录列表中,以供-l使用。

环境变量

以下环境变量会影响XCC的操作。多个路径由特定于操作系统的路径分隔符分隔(Windows为“;”,Mac和Linux为“:”)。

XCC_INCLUDE_PATH

要搜索的目录列表,就好像使用-I指定了这些目录一样,但在命令行上给出的-I选项之后。

XCC_XC_INCLUDE_PATH

XCC_C_INCLUDE_PATH

XCC_CPLUS_INCLUDE_PATH

XCC_ASSEMBLER_INCLUDE_PATH

每个环境变量仅适用于预处理相应语言的文件。这些变量指定要搜索的目录列表,就好像使用-isystem指定了这些目录一样,但在命令行上给出的-isystem选项之后。

XCC_LIBRARY_PATH

要搜索的目录列表,就好像使用-L指定了这些目录一样,但在命令行上给出的-L选项之后。

XCC_DEVICE_PATH

要搜索设备配置文件的目录列表。

XCC_TARGET_PATH

要搜索目标配置文件的目录列表。请参阅-target-print-targets-print-boards

XCC_EXEC_PREFIX

如果设置了该变量,编译器执行的子程序将以此环境变量的值作为前缀。当将前缀与子程序的名称组合时,不会添加目录分隔符。在执行汇编器或映射器时不应用前缀。

XCC_DEFAULT_TARGET

默认目标平台,就好像使用-target指定了它一样。如果未使用-target指定目标并且没有提供XN文件作为输入文件,则使用默认目标平台。