ocamldep:参数列表太长

ocamldep:参数列表太长,ocaml,Ocaml,当运行带有大量输入文件的ocamldep时,我遇到了臭名昭著的参数列表过长的错误 此问题仅在使用本机Windows OCaml编译器+Cygwin时发生:在此配置中,ARG_MAX返回32000,这是一个非常低的值,我认为这是Windows本身施加的限制,而不是Cygwin 对于这种错误,通常的解决方案是使用xargs,如果我们可以拆分参数,例如使用ls或rm时,但我不知道如何使用ocamldep。由于它希望所有文件同时在命令行中给出(以正确计算依赖关系),并且似乎没有选项给出文件中的文件列表(

当运行带有大量输入文件的
ocamldep
时,我遇到了臭名昭著的
参数列表过长的错误

此问题仅在使用本机Windows OCaml编译器+Cygwin时发生:在此配置中,
ARG_MAX
返回32000,这是一个非常低的值,我认为这是Windows本身施加的限制,而不是Cygwin


对于这种错误,通常的解决方案是使用
xargs
,如果我们可以拆分参数,例如使用
ls
rm
时,但我不知道如何使用
ocamldep
。由于它希望所有文件同时在命令行中给出(以正确计算依赖关系),并且似乎没有选项给出文件中的文件列表(如
-f filelist.txt
),有没有办法避免此问题?

您可以使用
xargs
,因为您不需要一次列出
ocamldep
的所有文件

例如,在OCaml编译器的源代码中,要了解GraphicsX11对图形的依赖关系,不需要列出graphcs.ml

$ cd otherlibs/graphics
$ ocamldep graphicsX11.ml
graphicsX11.cmo : graphics.cmi graphicsX11.cmi
graphicsX11.cmx : graphics.cmx graphicsX11.cmi
但是,必须使依赖项可访问
ocamldep
,否则将忽略它们。实际上,GraphicsX11也依赖于Hashtbl,它可以通过
-I dir
选项找到:

# Seek dependencies over stdlib modules too:
$ ocamldep -I ../../stdlib/ graphicsX11.ml
graphicsX11.cmo : ../../stdlib/hashtbl.cmi graphics.cmi graphicsX11.cmi
graphicsX11.cmx : ../../stdlib/hashtbl.cmx graphics.cmx graphicsX11.cmi

(我个人从未见过OCaml项目超过32000 ml/mli文件。哇。)

您可以使用
xargs
,因为您不需要一次列出
ocamldep
的所有文件

例如,在OCaml编译器的源代码中,要了解GraphicsX11对图形的依赖关系,不需要列出graphcs.ml

$ cd otherlibs/graphics
$ ocamldep graphicsX11.ml
graphicsX11.cmo : graphics.cmi graphicsX11.cmi
graphicsX11.cmx : graphics.cmx graphicsX11.cmi
但是,必须使依赖项可访问
ocamldep
,否则将忽略它们。实际上,GraphicsX11也依赖于Hashtbl,它可以通过
-I dir
选项找到:

# Seek dependencies over stdlib modules too:
$ ocamldep -I ../../stdlib/ graphicsX11.ml
graphicsX11.cmo : ../../stdlib/hashtbl.cmi graphics.cmi graphicsX11.cmi
graphicsX11.cmx : ../../stdlib/hashtbl.cmx graphics.cmx graphicsX11.cmi

(就我个人而言,我从未见过OCaml项目超过32000 ml/mli files.Wow。)

不是参数的数量,而是扩展命令行的总大小不能超过
ARG_MAX
。至少看起来是这样,因为我将扩展的命令行复制到一个文件中,它略大于32kib(在我的Linux上,ARG_MAX实际上是2Mb,有128kib的缓冲区)。其中80%是反复重复的过长目录名,顺便说一句。这并不理想,但我们离32k文件还很远……不是参数的数量,而是扩展命令行的总大小不能超过
ARG\u MAX
。至少看起来是这样,因为我将扩展的命令行复制到一个文件中,它略大于32kib(在我的Linux上,ARG_MAX实际上是2Mb,有128kib的缓冲区)。80%的目录名重复了很多次,顺便说一句。这并不理想,但我们离32k文件还很远。。。