我通过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
,并且更改它对已编译的二进制文件没有任何作用。
答案 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
文件的处理。我将在上面更新我的答案。