安装后更改 OCaml 的 gcc

Changing OCaml's gcc after installation

我通过 OPAM 安装了 OCaml,默认情况下它使用 gcc 作为编译 .c 文件的命令。例如,如果我 运行 ocamlopt -verbose file.c,我得到:

+ gcc -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -g  
  -fno-omit-frame-pointer -c -I'/home/user/.opam/4.02.1+fp/lib/ocaml' 'test.c'

我想更改 OCaml 使用的 GCC 二进制文件,例如将其替换为 gcc-5.1/opt/my-gcc/bin/gcc

是否可以在不重新配置和重新编译 OCaml 的情况下这样做?我想我可以将 gcc 别名添加到 PATH 中的目录,但如果有的话,我更喜欢更简洁的解决方案。

为了检查是否没有根据文本配置文件(我可以轻松更改)选择 gcc,我在我的 /home/user/.opam/4.02.1+fp 目录中搜索了 gcc,但是我发现的非二进制文件中唯一出现在 lib/ocaml/Makefile.config 中,更改它对已经编译的二进制文件没有任何作用。

ocamloptgcc 用于三件事。首先,用于编译 .c 出现在 ocamlopt 命令行上的文件。其次,用于组装它在编译 OCaml 源文件时内部生成的 .s 文件。第三,最后将目标文件链接在一起。

对于第一个和第三个,您可以提供带有 -cc 标志的不同编译器。

对于第二个,您需要重建 OCaml 编译器。

更新

这是我在 OS X 上使用 -verbose 标志编译 C 和 OCaml 模块时看到的内容:

$ ocamlopt -verbose -cc gcc -o m m.ml c.c 2>&1 | grep -v warning
+ clang -arch x86_64 -c -o 'm.o' \
  '/var/folders/w4/1tgxn_s936b148fdgb8l9xv80000gn/T/camlasm461f1b.s' \
+ gcc -c   -I'/usr/local/lib/ocaml' 'c.c'
+ clang -arch x86_64 -c -o \
  '/var/folders/w4/1tgxn_s936b148fdgb8l9xv80000gn/T/camlstartup695941.o' \
  '/var/folders/w4/1tgxn_s936b148fdgb8l9xv80000gn/T/camlstartupb6b001.s'
+ gcc -o 'm'   '-L/usr/local/lib/ocaml' \
  '/var/folders/w4/1tgxn_s936b148fdgb8l9xv80000gn/T/camlstartup695941.o' \
  '/usr/local/lib/ocaml/std_exit.o' 'm.o' \
  '/usr/local/lib/ocaml/stdlib.a' 'c.o' \
  '/usr/local/lib/ocaml/libasmrun.a' 

因此,-cc 选项给出的编译器用于编译.c 文件和最后的链接。要更改 .s 文件的处理方式,您需要重建编译器。我要更新上面的答案。