这是 ocamlc 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
ocamlc - OCaml 字节码编译器
概要
欧美 [ 选项 ] 文件名 ...
ocamlc.opt [ 选项 ] 文件名 ...
商品描述
OCaml 字节码编译器 欧美(1) 将OCaml源文件编译为字节码目标文件
并链接这些目标文件以生成独立的字节码可执行文件。 这些
可执行文件然后由字节码解释器运行 奥卡姆运行(1)。
- 欧美(1) command 具有类似于大多数 C 编译器之一的命令行界面。
它接受多种类型的参数并按顺序处理它们:
以 .mli 结尾的参数被视为编译单元接口的源文件。
接口指定编译单元导出的名称:它们声明值名称
它们的类型,定义公共数据类型,声明抽象数据类型,等等。 来自
文件 x.mli, 欧美(1)编译器在文件中产生一个编译接口 x.cmi。
以 .ml 结尾的参数被视为编译单元实现的源文件。
实现为单元导出的名称提供定义,并且还包含
要评估其副作用的表达式。 从文件 x.ml, 欧美(1)
编译器在文件中生成编译对象字节码 x.cmo。
如果接口文件 x.mli 存在,实现 x.ml 被检查
对应的编译接口 x.cmi,假定存在。 如果没有接口 x.mli
提供,汇编 x.ml 生成一个编译的接口文件 x此外.cmi
到编译后的目标代码文件 x.cmo。 文件 x.cmi 产生对应于
导出实现中定义的所有内容的接口 x毫升。
以 .cmo 结尾的参数被视为编译对象字节码。 这些文件已链接
连同通过编译 .ml 参数(如果有)获得的目标文件,以及
OCaml 标准库,用于生成独立的可执行程序。 其中的顺序
.cmo 和 .ml 参数出现在命令行上是相关的:编译单元是
在运行时按该顺序初始化,使用组件的链接时错误
单元在初始化之前。 因此,给定的 x.cmo 文件必须在所有 .cmo 之前
与单元相关的文件 x.
以 .cma 结尾的参数被视为对象字节码库。 一个图书馆
对象字节码将一组对象字节码文件(.cmo 文件)打包在一个文件中。
图书馆是用 欧美 -a (见说明 -a 下面的选项)。 这
库中包含的目标文件作为常规 .cmo 文件(见上文)链接,在
构建 .cma 文件时指定的顺序。 唯一的区别是,如果一个对象
库中包含的文件在程序中的任何地方都没有被引用,那么它就不是
联入。
以 .c 结尾的参数被传递给 C 编译器,它生成一个 .o 目标文件。
这个目标文件与程序链接,如果 -自定义 标志已设置(请参阅
的描述 -自定义 下文)。
以 .o 或 .a 结尾的参数被假定为 C 目标文件和库。 他们是
链接时传递给 C 链接器 -自定义 模式(见描述 -自定义
下文)。
以 .so 结尾的参数被假定为 C 共享库 (DLL)。 在链接过程中,他们
搜索从 OCaml 代码引用的外部 C 函数,它们的名称是
写入生成的字节码可执行文件。 运行时系统 奥卡姆运行(1) 然后加载
它们在程序启动时动态地进行。
链接阶段的输出是一个包含编译字节码的文件,可以
由 OCaml 字节码解释器执行:命令 奥卡姆运行(1). 如果 输出 是
链接阶段产生的文件名,命令 奥卡姆运行 输出
参数1 参数2 ... 精氨酸 执行包含在的编译代码 输出,将其作为
参数字符串 参数1 至 精氨酸。 (见 奥卡姆运行(1) 了解更多详情。)
在大多数系统上,链接阶段生成的文件可以直接运行,如下所示:
./caml.out 参数1 参数2 ... 精氨酸. 生成的文件设置了可执行位,并且
设法自行启动字节码解释器。
ocamlc.opt 是同一个编译器 欧美, 但使用本机代码编译器编译
康乐特(1). 因此,它的行为完全像 欧美,但编译速度更快。 ocamlc.opt 五月
并非在 OCaml 的所有安装中都可用。
配置
以下命令行选项被识别 欧美(1)。
-a 使用命令中给出的目标文件(.cmo 文件)构建库(.cma 文件)
行,而不是将它们链接到可执行文件中。 图书馆的名字必须
设置为 -o 选项。
If -自定义, -cclib or -ccopt 选项在命令行上传递,这些选项
存储在生成的 .cma 库中。 然后,链接到这个库
自动添加回 -自定义, -cclib 和 -ccopt 选项就像他们已经
在命令行上提供,除非 -无自动链接 给出了选项。 此外,
一个子串 $CAMLORIIN 在里面 -ccopt 选项将被完整路径替换
到 .cma 库,不包括文件名。 -绝对名称 显示绝对文件名
错误信息。
-注释 转储有关编译的详细信息(类型、绑定、尾调用等)。
档案资料 SRC.ml 被放入文件 SRC.annot。 在类型的情况下
错误,在错误之前转储类型检查器推断出的所有信息。 这
SRC.annot 文件可以与中给出的 emacs 命令一起使用 emacs/caml-types.el 至
以交互方式显示类型和其他注释。
-bin-注释
转储有关编译的详细信息(类型、绑定、尾调用等)
以二进制格式。 档案资料 SRC.ml 被放入文件 SRC.cmt。 在
类型错误的情况下,转储之前由类型检查器推断的所有信息
错误。 生成的注释文件 -bin-注释 包含更多信息
并且比生成的文件更紧凑 -注释.
-c 只编译。 抑制编译的链接阶段。 源代码文件是
转成编译文件,但没有产生可执行文件。 这个选项是
单独编译模块很有用。
-cc 补偿
使用 VHDL 语言编写 补偿 在“自定义运行时”模式下链接时作为 C 链接器(请参阅 -自定义
选项)并作为用于编译 .c 源文件的 C 编译器。
-cclib -l库名
通过 -l库名 在“自定义运行时”模式下链接时的 C 链接器选项
(见 -自定义 选项)。 这会导致给定的 C 库与
程序。
-ccopt 选项
通过给定的 选项 到 C 编译器和链接器,当在“自定义
运行时”模式(参见 -自定义 选项)。 例如, -ccopt -LDIR 导致 C
用于在目录中搜索 C 库的链接器 DIR.
-compat-32
检查生成的字节码可执行文件是否可以在 32 位平台上运行并发出信号
如果不能,则为错误。 这在 64 位机器上编译字节码时很有用。
-config
打印版本号 欧美(1) 及其配置的详细摘要,
然后退出。
-自定义
“自定义运行时”模式下的链接。 在默认链接模式下,链接器生成
旨在与共享运行时系统一起执行的字节码,
奥卡姆运行(1). 在自定义运行时模式下,链接器生成一个输出文件,该文件
包含运行时系统和程序的字节码。 所结果的
文件较大,但可以直接执行,即使 奥卡姆运行(1) 命令是
未安装。 此外,“自定义运行时”模式可以将 OCaml 代码与
用户定义的 C 函数。
切勿使用 剥离(1) 生成的可执行文件的命令 欧美 -自定义, 这个
将删除可执行文件的字节码部分。
-dlib -l库名
安排C共享库 dll文件库名。所以 由运行动态加载
时间系统 奥卡姆运行(1) 在程序启动时。
-dll路径 DIR
添加目录 DIR 到共享 C 库的运行时搜索路径。 在
链接时,在标准搜索路径中搜索共享库(
对应于该 -I 选项)。 这 -dll路径 选项只是存储 DIR ,在
生成的可执行文件,其中 奥卡姆运行(1)能找到并使用它。
-包 IDENT
接受此选项是为了与 康乐特(1) ; 它什么都不做。
-g 在编译和链接时添加调试信息。 此选项是必需的
为了能够调试程序 调试(1)并产生堆栈
当程序因未捕获的异常而终止时进行回溯。
-i 使编译器打印所有定义的名称(带有它们的推断类型或它们的
定义)编译实现(.ml 文件)时。 没有编译文件 (.cmo
和 .cmi 文件)。 这对于检查推断的类型很有用
编译器。 此外,由于输出遵循接口的语法,它可以帮助
在为文件编写显式接口(.mli 文件)时:只需重定向标准
编译器的输出到 .mli 文件,然后编辑该文件以删除所有
未导出名称的声明。
-I 目录
将给定目录添加到搜索编译接口的目录列表中
文件 (.cmi)、编译的目标代码文件 (.cmo)、库 (.cma) 和 C 库
指定为 -cclib -lXXX . 默认情况下,首先搜索当前目录,
然后是标准库目录。 添加的目录 -I 被搜查
当前目录,按照它们在命令行中给出的顺序,
但在标准库目录之前。 另见选项 -nostdlib.
如果给定的目录以 +,它是相对于标准库
目录。 例如, -I +编译器库 添加子目录 编译器库 of
标准库到搜索路径。
-impl 文件名
编译文件 文件名 作为一个实现文件,即使它的扩展名不是
毫升。
-intf 文件名
编译文件 文件名 作为接口文件,即使其扩展名不是 .mli。
-intf-后缀 绳子
识别以结尾的文件名 绳子 作为接口文件(而不是默认的
.mli)。
-保持文档
将文档字符串保存在生成的 .cmi 文件中。
-保持位置
在生成的 .cmi 文件中保留位置。
-标签
标签在类型中不被忽略,标签可以在应用中使用,并且标注
参数可以按任何顺序给出。 这是默认设置。
-linkall
强制链接库中包含的所有模块。如果此标志不是
给定,未链接的模块未链接。构建库时(选项 -a),
设置 -linkall 选项强制涉及该程序的所有后续链接
library 链接库中包含的所有模块。
-制作运行时
构建自定义运行时系统(在选项指定的文件中 -o) 纳入
在命令行上给出的 C 目标文件和库。 这个自定义运行时
system 可以稍后用于执行使用该选项生成的字节码可执行文件
欧美 -使用运行时 运行时名称.
-没有别名-deps
不要记录模块别名的依赖关系。
-无应用功能
停用函子的应用行为。 有了这个选项,每个函子
应用程序在其结果中生成新类型并两次应用相同的函子
同一个论点产生两个不兼容的结构。
-无断言
不要编译断言检查。 注意特殊形式 断言 false 总是
编译是因为它是专门输入的。 链接时此标志无效
已经编译好的文件。
-无自动链接
链接 .cma 库时,忽略 -自定义, -cclib 和 -ccopt 潜在的选择
包含在库中(如果在构建
图书馆)。 如果库包含不正确的 C 规范,这会很有用
库或 C 选项; 在这种情况下,在链接期间,设置 -无自动链接 并通过
在命令行上更正 C 库和选项。
-无标签
忽略类型中的非可选标签。 标签不能在应用程序中使用,并且
参数顺序变得严格。
-nostdlib
不自动将标准库目录添加到目录列表中
搜索已编译的接口文件 (.cmi)、已编译的目标代码文件 (.cmo)、
库 (.cma) 和 C 库指定 -cclib -lXXX . 另见选项
-I.
-o 执行文件
指定链接器生成的输出文件的名称。 默认输出名称
is 出, 与 Unix 传统保持一致。 如果 -a 给出选项,指定
生成的库的名称。 如果 -包 给出选项,指定名称
生成的打包目标文件。 如果 -输出对象 给出选项,指定
生成的输出文件的名称。 这也可以在编译时使用
接口或实现文件,没有链接,在这种情况下它设置名称
cmi 或 cmo 文件,并将模块名称设置为文件名,直到
第一个点。
-打开 模块
在处理接口或实现文件之前打开给定的模块。 如果
几个 -打开 给出了选项,它们按顺序处理,就像
声明打开! 模块1;; ... 打开! 模块N;; 被添加到每个文件的顶部。
-输出对象
使链接器生成 C 目标文件而不是字节码可执行文件。
这对于将 OCaml 代码包装为 C 库非常有用,可从任何 C 程序调用。 这
输出目标文件的名称必须设置为 -o 选项。 这个选项也可以
用于生成 C 源文件(.c 扩展名)或编译的共享/动态
库(.so 扩展名)。
-包 构建字节码目标文件(.cmo 文件)及其关联的编译接口
(.cmi) 组合命令行上给出的目标文件,使它们出现
作为输出 .cmo 文件的子模块。 输出 .cmo 文件的名称必须是
与 -o 选项。 例如, 欧美 -包 -o p.cmo 奇莫 b.cmo c.cmo
生成描述编译单元的编译文件 p.cmo 和 p.cmi,具有三个
子模块 A、B 和 C,对应于目标文件 a.cmo 的内容,
b.cmo 和 c.cmo。 这些内容可以作为 PA、PB 和 PC 参考
程序的其余部分。
-pp 命令
使编译器调用给定的 命令 作为每个源的预处理器
文件。 的输出 命令 被重定向到一个中间文件,即
编译。 如果没有编译错误,则删除中间文件
然后。 此文件的名称是根据源文件的基本名称构建的
接口 (.mli) 文件的扩展名为 .ppi,实现文件的扩展名为 .ppo
(.ml) 文件。
-ppx 命令
解析后,通过预处理器管道抽象语法树 命令。 该
模块 ast_mapper(3) 实现一个预处理器的外部接口。
-主要的
在类型检查时检查信息路径,以确保所有类型都是
以主要方式派生。 使用带标签的参数和/或多态时
方法,需要此标志以确保编译器的未来版本
能够正确推断类型,即使内部算法发生变化。 所有程序
接受 -主要的 模式在默认模式下也被接受
类型,但不同的二进制签名,这可能会减慢类型检查的速度; 然而
在发布源代码之前使用它一次是个好主意。
-rectypes
在类型检查期间允许任意递归类型。 默认情况下,仅递归
支持递归通过对象类型的类型。 注意一次
你已经使用这个标志创建了一个接口,你必须再次使用它
依赖性。
-运行时变体 后缀
添加 后缀 到程序将使用的运行时库的名称。 如果
OCaml 配置了选项 -with-调试运行时,则 d 后缀是
支持并提供运行时的调试版本。
-安全字符串
强制类型之间的分离 绳子 和 字节,从而使字符串读取-
只要。 这将成为 OCaml 未来版本的默认设置。
-短路径
当一个类型在多个模块路径下可见时,使用最短的一个
在推断的接口以及错误和警告消息中打印类型的名称。
-严格顺序
强制每个序列的左侧部分具有类型单元。
-线
编译或链接多线程程序,结合系统“线程”
中描述的库 - OCaml 用户的 手册.
-不安全
关闭数组和字符串访问的边界检查( 五(一)和s.[i]
结构体)。 编译的程序 -不安全 因此稍微快一点,但是
不安全:如果程序访问数组或字符串之外的任何事情都可能发生
它的界限。
-不安全字符串
识别类型 绳子 和 字节,从而使字符串可写。 由于原因
向后兼容,这是目前的默认设置,但是这
将在 OCaml 的未来版本中更改。
-使用运行时 运行时名称
生成可以在自定义运行时执行的字节码可执行文件
系统 运行时名称, 早先用 欧美 -制作运行时 运行时名称.
-v 打印编译器的版本号和标准库的位置
目录,然后退出。
-冗长
在执行之前打印所有外部命令,特别是调用
C 编译器和链接器 -自定义 模式。 用于调试 C 库问题。
-vm线程
编译或链接多线程程序,结合 VM 级线程
中描述的库 - OCaml 用户的 手册.
-vnum or -版
以简短形式打印编译器的版本号(例如“3.11.0”),然后退出。
-w 警告列表
启用、禁用或将参数指定的警告标记为致命
警告列表.
每个警告都可以 启用 or 禁用,并且每个警告都可以 致命or 非致命的.
如果禁用了警告,则不会显示并且不会影响任何编译
方式(即使它是致命的)。 如果启用了警告,则正常显示为
每当源代码触发编译器时。 如果它已启用且致命,则
编译器在显示后也会因错误而停止。
- 警告列表 参数是一系列警告说明符,没有分隔符
它们之间。 警告说明符是以下之一:
+NUM 启用警告编号 NUM.
-NUM 禁用警告编号 NUM.
@NUM 启用并标记为致命警告编号 NUM.
+编号1..编号2 启用之间的所有警告 编号1 和 编号2 (包括的)。
-编号1..编号2 禁用所有警告 编号1 和 编号2 (包括的)。
@编号1..编号2 启用并将所有警告标记为致命 编号1 和 编号2
(包括的)。
+邮件 启用对应的警告集 邮件. 这封信可能是
大写或小写。
-邮件 禁用对应的警告集 邮件. 这封信可能是
大写或小写。
@邮件 启用和标记为致命的警告集对应 邮件.
字母可以是大写或小写。
大写字母 启用对应的警告集 大写字母.
小写字母 禁用对应的警告集 小写字母.
警告编号如下。
1 可疑的评论开始标记。
2 可疑的评论结束标记。
3 已弃用的功能。
4 脆弱的模式匹配:匹配将保持完整,即使
额外的构造函数被添加到匹配的变体类型之一。
5 部分应用函数:结果为函数类型且为
忽略了。
6 功能应用中省略了标签。
7 方法覆盖而不使用“方法!” 关键词
8 部分匹配:模式匹配中的缺失案例。
9 记录模式中缺少字段。
10 没有类型的序列左侧的表达式 单元
(这不是函数,请参阅警告编号 5)。
11 模式匹配中的冗余大小写(未使用的匹配大小写)。
12 模式匹配中的冗余子模式。
13 覆盖实例变量。
14 字符串常量中的非法反斜杠转义。
15 隐式公开的私有方法。
16 不可擦除的可选参数。
17 未声明的虚方法。
18 非主要类型。
19 没有公国的类型。
20 未使用的函数参数。
21 不返回声明。
22 预处理器警告。
23 无用记录 - 条款。
24 Bad module name:源文件名不是有效的 OCaml 模块名。
25 模式匹配,所有子句受到保护。
26 可疑的未使用变量:绑定的未使用变量 让 or as及
不以下划线 (_) 字符开头。
27 无害的未使用变量:未绑定的未使用变量 让 也不 as,
并且不以下划线 (_) 字符开头。
28 模式包含应用于下划线 (_) 的常量构造函数
格局。
29 在字符串常量中发现了一个非转义的行尾。 这可能会导致
Unix 和 Windows 之间的可移植性问题。
30 两个同名的标签或构造函数定义在两个相互
递归类型。
31 一个模块在同一个可执行文件中链接了两次。
32 未使用的值声明。
33 未使用的打开语句。
34 未使用的类型声明。
35 未使用的 for 循环索引。
36 未使用的祖先变量。
37 未使用的构造函数。
38 未使用的扩展构造函数。
39 未使用的记录标志。
40 构造函数或标签名称超出范围。
41 不明确的构造函数或标签名称。
42 消除歧义的构造函数或标签名称。
43 非可选标签作为可选应用。
44 Open 语句隐藏了一个已经定义的标识符。
45 Open 语句掩盖了已定义的标签或构造函数。
46 环境变量错误。
47 非法的属性负载。
48 隐式消除可选参数。
49 查找模块别名时缺少 cmi 文件。
50 意外的文档注释。
这些字母代表以下几组警告。 任何未提及的字母
这里对应于空集。
A 所有警告
C 1,2
D 3
E 4
F 5
K 32,33,34,35,36,37,38,39
L 6
M 7
P 8
R 9
S 10
U 11,12
V 13
X 14,15,16,17,18,19,20,21,22,23,24,25,30
Y 26
Z 27
默认设置是 -w +a-4-6-7-9-27-29-32..39-41-42-44-45-48-50。 注意
警告 5 和 10 并不总是触发,取决于类型的内部
检查。
-警告错误 警告列表
将参数中指定的警告标记为错误 警告列表. 编译器
当发出这些警告之一时,将因错误而停止。 这 警告列表
具有相同的含义 -w 选项:一个 + 符号(或大写字母)标记
相应的警告是致命的,一个 - 符号(或小写字母)将它们
回到非致命警告,以及 @ 标志使能和标记为致命
相应的警告。
注意:不建议使用 -警告错误 生产代码中的选项,
因为它几乎肯定会阻止用更高版本编译您的程序
OCaml 添加新警告或修改现有警告时。
默认设置是 -警告错误 -a (所有警告都是非致命的)。
-警告帮助
显示所有可用警告编号的说明。
-在哪里 打印标准库的位置,然后退出。
- 文件 流程 文件 作为文件名,即使它以破折号 (-) 字符开头。
-救命 or - 帮帮我
显示简短的使用摘要并退出。
使用 onworks.net 服务在线使用 ocamlc