我写信询问编译时如何选择gcc的版本。在我的机器上,我相信安装了多个版本的 gcc。因为命令“gcc -v”返回“gcc version 6.4.0 (GCC)”,而命令“cc”返回“gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)”。我知道“cc”实际上链接到 gcc 编译器。在 makefile 中,'CC ?= gcc' 应该是将 cc 链接到 gcc 的命令。
那么,这是否意味着我编译时始终使用 gcc 4.4.7 ?请问,我应该如何更改 cc 或 makefile 以使其链接到较新的 gcc 版本?顺便说一句,我没有使用“sudo”命令的权限。
编辑:感谢您的回复。 type -a cc 的输出是 'cc is /usr/bin/cc' 另一个输出是 'gcc is /util/bin/gcc gcc is /usr/bin/gcc' 上面的路径是 gcc 6.4,下面的路径是一个是旧版本。
答案1
CC
你的makefile
只是变量。您可以指定系统中的任何编译器或可执行文件。
找到你的“新”gcc 的直接路径并将其放在上面CC={Path}
,编译应该没问题。
答案2
线路
CC ?= gcc
Makefile 中的意思是“如果变量CC
尚未设置,请将其设置为gcc
”。
稍后在Makefile中,CC
变量中列出的编译器将用于编译C语言文件(CC
是C编译器的标准变量)。
如果gcc
是您要使用的编译器,则无需更改任何内容。
如果你想使用另一个编译器,例如clang
或gcc-7
或其他完全不同的东西,你可以不是必须更改Makefile。相反,只需说
make CC=clang
在命令行上(其中clang
可能只是编译器可执行文件名称,或者它的完整路径(如果您自己的 中不可用$PATH
))。
要使用ccache
(一个“编译器缓存”)例如clang
,
make CC='ccache clang'
由于 MakefileCC
在将变量设置为 之前会测试变量是否已设置gcc
,因此上述方法是make
使用不同编译器调用的最佳方法。如果它无条件地设置了值CC
,那么您将不得不编辑 Makefile。