在CDT项目中使用不同的C++编译器的正确方法是什么?

6
我使用Linux上的Eclipse CDT Mars.2(和Neon RC)。 我发行版的默认C ++编译器是GCC 5.3.1,但对于我的某些工作,我使用GCC 4.9.3。 我希望关于我的项目的所有内容都使用GCC 4.9.3:工具发现,C ++标准库,包含文件路径,索引器,预处理 - 所有内容都需要如此。
请问正确的方法是什么? Eclipse似乎具有相当复杂的“提供者”和“工具链”配置,我不想进行无法撤消的设置......
注意:我确实尝试在一些预处理程序包含等提供者设置中用/usr/bin/g++-4.9替换${COMMAND},这确实导致发现与4.9.3相关的包含文件,但我的索引器不喜欢它,所有的std::stuff都显示为红色和未解决。然后我尝试查找设置用于索引的编译器版本的位置,但是我找不到。

我认为Eclipse不会像那样提供干净的配置。我也使用Eclipse CDT,但最终我只是坚持使用发行版提供的编译器。但这时候就有人会问,为什么要使用旧版本的GCC呢? - Poriferous
这是Eclipse CDT的问题,因为它预先假定了GCC版本,就像它预先假定了某个特定的Java版本一样。它不像Codeblocks这样的另一个IDE那么灵活。不幸的是,我们目睹Linux缺乏一个具体的C++ IDE。 - Poriferous
@einpoklum 你说得对,我应该解释一下我的上下文:编译器安装在不同的文件夹中。但是,也许你可以通过为每个编译器创建一个文件夹并将gcc和libs链接到真正的编译器来恢复这个上下文。然后,只需以这样的方式设置PATH(如果安装在非标准路径中,则还需设置LD_LIBRARY_PATH),使得你的带有符号链接的文件夹被首先找到。 - URaoul
我已经尝试回答你的问题,但没有正确处理你关于事情出错的“注释”。希望我的答案能够帮助你朝着正确的方向前进。 - Jonah Graham
1
@Poriferous 我在Windows和Linux上使用Qt Creator来进行所有的C/C++项目,即使与Qt无关。它是用C++/Qt编写的,因此非常快速。而且它没有Eclipse那么复杂。 - Equilibrius
显示剩余3条评论
1个回答

4
有两种可能的答案,这取决于您是在进行“标准制作”还是“管理制作”。标准制作意味着您正在编写自己的Makefile并自行管理所有内容。托管制作意味着您让CDT创建Makefile并对其进行管理。

标准制作

对于标准制作,一切都由扫描程序发现的内容控制。扫描程序处理查找项目中所有系统包含文件的工作,并将它们馈送到索引器以解析符号,还允许诸如头文件导航之类的功能。
要更改使用的编译器,您需要用所选编译器替换${COMMAND}。由您(作为用户)来确保此命令与您在Makefile中使用的相匹配。
要更改${COMMAND}:
  1. 通过右键单击工程,打开 工程属性
  2. 在树状结构中选择 C/C++通用 -> 预处理器包含路径、宏等
  3. 选择 提供者 选项卡
  4. 从列表中选择 CDT GCC内置编译器设置
  5. 获取编译器规格的命令: 中的 ${COMMAND} 替换为您想要使用的 g++ 可执行文件路径。

这里有一张截图以帮助理解:

command edit

为了看到这个过程,以下是一些有和没有所描述的更改的屏幕截图。在我的电脑上,我有版本为5.3的/usr/bin/g++和版本为4.7的/usr/bin/g++-4.7使用默认g++

g++5

使用覆盖的 g++ 版本 4

g++4

使用环境管理

以上方法的问题在于需要在Makefile和构建设置之间协调g++。解决此问题的一种方法是使用C/C++构建环境设置将CXX定义为要使用的编译器。在项目设置(项目属性 -> C/C++构建 -> 环境)或全局首选项(首选项 -> C/C++ -> 构建 -> 环境)中设置CXX环境变量。

然后将${COMMAND}替换为${CXX}

下面是演示我所描述内容的屏幕截图:

environment

管理型构建

如果您使用的是管理型构建,您需要覆盖各个工具的构建设置。这些设置会直接反映到标准构建中使用的预处理器包含路径、宏等设置中。

要更改构建设置,您需要在每种工具中覆盖编译器使用的命令,每种工具需要覆盖一次。从项目属性 -> C/C++ 构建 -> 设置开始,然后编辑以下内容:

  • GCC C++ 编译器 -> 通常设置为g++
  • GCC C 编译器 -> 通常设置为gcc
  • GCC C++ 链接器 -> 通常设置为g++

以下是演示截图:

mananged make screenshot


1
我会在几天内回复您,感谢您提供详细的答案。 - einpoklum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接