安装后更改OCaml的gcc

时间:2015-10-28 15:20:25

标签: gcc ocaml

我通过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,我在gcc目录中搜索/home/user/.opam/4.02.1+fp的出现次数,但仅限{}发现在我发现的非二进制文件中是lib/ocaml/Makefile.config,并且更改它对已编译的二进制文件没有任何作用。

1 个答案:

答案 0 :(得分:1)

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

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

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

<强>更新

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

$ 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文件的处理。我将在上面更新我的答案。