Gcc 更改OCaml';安装后的通用条款

Gcc 更改OCaml';安装后的通用条款,gcc,ocaml,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或/op

我通过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
别名添加到
路径
中的一个目录中,但如果有更干净的解决方案,我更喜欢它


为了检查
gcc
是否不是基于文本配置文件选择的(我可以很容易地更改),我在
/home/user/.opam/4.02.1+fp
目录中搜索了
gcc
,但在非二进制文件中找到的唯一匹配项是
lib/ocaml/Makefile.config
,更改它对已编译的二进制文件没有任何作用。

ocamlopt
gcc
用于三件事。首先,用于编译出现在
ocamlopt
命令行上的
.c
文件。第二,用于汇编编译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
文件的处理方式,需要重建编译器。我将更新上面的答案。

您想做什么,更改编译器中使用的c二进制文件,还是更改包中使用的c编译器?在前者中,您需要重新编译。我想更改
ocamlopt
二进制文件使用的路径以查找GCC。我希望可能会有环境变量或配置文件来更改它,但根据您所说的,显然没有。实际上(我在其中搜索了“gcc”而不是“cc”,并错过了相关选项),选项-cc确实如此“使用ccomp作为调用的C链接器来构建最终的可执行文件,并作为编译.C源文件的C编译器”。这似乎表明步骤3也由
-cc
中定义的编译器完成。事实上,如果我尝试
-cc“gcc-m32“
在64位主机上,
ld
尝试将ocamlopt生成的64位文件与我提供的
gcc-m32
选项链接时失败。(谢谢,我更新了我现在认为正确的答案。)