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

Posted

技术标签:

【中文标题】在 CDT 项目中使用不同的 C++ 编译器的正确方法是啥?【英文标题】:What's the right way to work with a different C++ compiler in a CDT project?在 CDT 项目中使用不同的 C++ 编译器的正确方法是什么? 【发布时间】:2016-10-14 10:26:12 【问题描述】:

我在 Linux 上使用 Eclipse CDT Mars.2(和 Neon RC)。我的发行版的默认 C++ 编译器是 GCC 5.3.1,但对于我的一些工作,我使用 GCC 4.9.3。我希望关于我的项目的一切都使用 GCC 4.9.3:工具发现、C++ 标准库、包含文件路径、索引器、预处理 - 全部。

这样做的正确方法是什么?似乎 Eclipse 具有相当拜占庭式的“提供者”和“工具链”配置,我不想进行以后无法撤消的设置...

注意: 我确实尝试在某些 Preprocessor Includes 等提供程序设置中将 $COMMAND 替换为 /usr/bin/g++-4.9,这确实导致发现 4.9.3 相关的包含文件,但我的索引器不喜欢这样,所有std::stuff 显示为红色且未解决。然后我尝试寻找我设置用于索引的编译器版本的位置,但我找不到。

【问题讨论】:

我认为 Eclipse 不会因为这样的配置而变得干净利落。我也使用 Eclipse CDT,但我最终还是坚持使用我的发行版提供的任何编译器。但有人会问为什么要使用旧版本的 GCC? @Poriferous:很多原因。使用 CUDA、C++11 ABI 问题、交叉编译等。另外,如果你说的是真的,那么他们所有的配置机制有什么用?我怀疑他们实际上在任何地方硬编码/usr/bin/cc 这是 Eclipse CDT 的问题,因为它预先假定了 GCC 版本,就像它预先假定了某个 Java 版本一样。它不如 Codeblocks 等其他 IDE 灵活。不幸的是,我们见证了 Linux 缺乏具体的 C++ IDE。 我不知道这是否正确,但是在启动 eclipse 之前设置环境变量(PATH 和 LD_LIBRARY_PATH)以使编译器版本成为您想要的默认版本很简单,并且就像一个魅力。 @Poriferous 我在 Windows 和 Linux 上对所有 C/C++ 项目使用 Qt Creator,甚至与 Qt 无关。它是用 C++/Qt 编写的,所以速度非常快。而且它没有Eclipse那么复杂。 【参考方案1】:

有两种可能的答案,具体取决于您是在做“标准制作”还是“管理制作”。标准 Make 意味着您正在编写自己的 Makefile 并自己管理所有内容。 Managed Make 意味着您让 CDT 创建并管理 Makefile。

标准品牌

对于标准品牌,一切都由扫描仪发现的内容控制。扫描程序负责查找属于项目一部分的所有系统包含文件,并将这些文件输入索引器以解析符号,还允许进行头文件导航等操作。

要更改使用的编译器,您需要将$COMMAND 替换为您选择的编译器。由您(作为用户)来确保此命令与您在 Makefile 中使用的内容相匹配。

要更改$COMMAND

    打开项目属性(通过右键单击项目) 在树中选择C/C++ General -> 预处理器包括路径、宏等。 选择提供者标签 从列表中选择CDT GCC 内置编译器设置命令中的$COMMAND 替换为您想要的g++ 可执行文件:

这里有一个截图可以帮助你:

要查看实际效果,这里有一些带有和不带有所描述更改的屏幕截图。在我的机器上,/usr/bin/g++ 是 5.3 版,/usr/bin/g++-4.7 是 4.7 版。

使用默认 g++

将 g++ 覆盖到版本 4

使用环境管理

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

然后将$COMMAND 替换为$CXX

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

托管品牌

如果您使用的是 Managed Make,则需要覆盖各个工具的构建设置。然后,这些设置会输入到预处理器包含路径、宏等设置,就像 Standard Make 直接使用的那样。

要更改构建设置,您需要在几个地方覆盖用于编译器的命令,每种工具一次。从 Project Properties -> C/C++ Build -> Settings 开始,然后编辑其中的每一个:

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

这是一个截图来演示:

【讨论】:

我会在几天后回复您,感谢您的详细答复。

以上是关于在 CDT 项目中使用不同的 C++ 编译器的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 c++ Eclipse CDT 中使用不同的值构建

C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同

从命令行构建多个 CDT C++ 项目

GHS .gpj 项目到 Eclipse CDT

C++ opencv 编译错误 - Windows7 64-bit using Eclipse CDT

带有 Visual Studio 2013 编译器的 Eclipse CDT (C++ IDE)