如何在Ubuntu中更改默认的GCC编译器?

Rob*_*lex 87 linux ubuntu gcc

我已经在ubuntu 11.04上安装了gcc-3.3/g ++ - 3.3,它已经有了gcc/g ++ - 4.4.所以在我的系统中,gcc-3.3和4.4都可用.我能够按我的意愿调用两个编译器.如果我只是调用该命令,gcc那么gcc-4.4将被调用.要调用gcc-3.3,我必须使用该命令gcc-3.3.

如何将默认编译器更改为gcc-3.3?当我执行命令时,gcc它应该调用gcc-3.3而不是gcc-4.4.

另外,如何将make文件中的变量CXX更改为gcc-3.3?我希望更改系统中的一个常见全局位置,而不是更改所有make文件.

jop*_*rat 105

正如@Tommy建议的那样,你应该使用update-alternatives.
它为一个系列的每个软件分配值,以便定义应用程序的调用顺序.

它用于在系统上维护相同软件的不同版本.在你的情况下,你将能够使用几个gcc倾向,一个将受到青睐.

要弄清楚gcc的当前优先级,请输入@ tripleee评论指出的命令:

update-alternatives --query gcc
Run Code Online (Sandbox Code Playgroud)

现在,请注意优先级,gcc-4.4因为您需要提供更高的优先级gcc-3.3.
要设置替代方案,您应该有这样的东西(假设您的gcc安装位于/usr/bin/gcc-3.3,并且gcc-4.4优先级小于50):

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

最后,您还可以使用交互式界面update-alternatives轻松切换版本.键入update-alternatives --config gcc以要求您选择要在安装的gcc中使用的gcc版本.

- 编辑2 -

现在,要在系统范围内修复CXX环境变​​量,您需要将@ DipSwitch指示的行放在您的.bashrc文件中(这将仅对您的用户应用更改,这在我看来更安全):

echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 66

以下是jHackTheRipper对TL的回答的完整示例; DR众人.:-)在这种情况下,我想在Ubuntu系统上运行g ++ - 4.5,默认为4.6.作为root:

apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5
Run Code Online (Sandbox Code Playgroud)

这里,4.6仍然是默认值(又名"自动模式"),但我明确地暂时切换到4.5(手动模式).回到4.6:

update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin
Run Code Online (Sandbox Code Playgroud)

(注意使用cpp-bin而不仅仅是cpp.Ubuntu已经有一个cpp替代主链接/lib/cpp.重命名该链接将删除/lib/cpp链接,这可能会破坏脚本.)

  • 对于未来的懒人试图将安装的g ++ - 5编译器设置为默认值:`sudo update-alternatives --install/usr/bin/g ++ g ++/usr/bin/g ++ - 5 100` (6认同)

Ant*_*n K 19

这是如何创建和管理主和从(gcc和g ++)替代品的伟大描述和逐步说明.

不久之后:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc
Run Code Online (Sandbox Code Playgroud)


dil*_*eks 7

现在,gcc-4.9可用于Ubuntu /精确版.

创建一组编译器替代方案,其中发行版编译器具有更高的优先级:

root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO
Run Code Online (Sandbox Code Playgroud)

注意:使用gcc版本开关自动更改g ++版本.cpp-bin必须单独完成,因为存在"cpp"主选择.

列出可用的编译器替代

root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin
Run Code Online (Sandbox Code Playgroud)

要手动选择gcc,g ++和cpp的4.9版本,请执行以下操作:

root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin
Run Code Online (Sandbox Code Playgroud)

检查编译器版本:

root$ for i in gcc g++ cpp ; do $i --version ; done
Run Code Online (Sandbox Code Playgroud)

恢复发行版编译器设置(此处:返回到v4.6):

root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
Run Code Online (Sandbox Code Playgroud)


szo*_*aki 7

4.8到6之间全部--slaves:

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8
Run Code Online (Sandbox Code Playgroud)

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6
Run Code Online (Sandbox Code Playgroud)

他们之间的变化update-alternatives --config gcc.

  • 删除 `cc` 和 `c++` 行后工作正常,这会导致错误:替代 cc 不能成为 gcc 的从属:它是主替代 (2认同)