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

2024-03-16

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

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

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


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

标准品牌

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

要更改所使用的编译器,您需要替换${COMMAND}使用您选择的编译器。您(作为用户)需要确保该命令与您在 Makefile 中使用的命令相匹配。

要改变${COMMAND}:

  1. Open 项目属性(右键单击项目)
  2. Select C/C++ 通用 -> 预处理器包括路径、宏等在树上。
  3. Select 供应商 tab
  4. Select CDT GCC 内置编译器设置从列表中
  5. 更换${COMMAND} in 获取编译器规格的命令:到您想要的 g++ 可执行文件。

这是一个有帮助的屏幕截图:

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

使用默认的 g++

将 g++ 覆盖到版本 4

使用环境管理

上面的问题是你需要协调g++在 Makefile 和构建设置之间。解决此问题的一种方法是使用C/C++ 构建环境设置来定义CXX作为编译器来使用。设置CXX项目设置中的环境变量(项目属性 -> C/C++ 构建 -> 环境)或全局偏好(优先 -> C/C++ -> Build -> 环境).

然后更换${COMMAND} with ${CXX}.

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

托管制造

相反,如果您使用 Managed Make,则需要覆盖各个工具的构建设置。然后将这些设置输入到预处理器包括路径、宏等。Standard Make 直接使用的设置。

要更改构建设置,您需要在几个地方覆盖用于编译器的命令,针对每种类型的工具一次。开始于项目属性 -> C/C++ 构建 -> Settings然后编辑其中每一个:

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

这是一个截图来演示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • SharpZipLib - 将文件夹/目录添加到 zip 存档

    通过示例 我很好地掌握了如何提取 zip 文件 几乎在每个示例中 识别 ZipEntry 是否为目录的方法如下 string directoryName Path GetDirectoryName theEntry Name string
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 如何从RichTextBox中获取显示的文本?

    如何获得显示的RichTextBox 中的文本 我的意思是 如果 RichTextBox 滚动到末尾 我只想接收那些对我来说可见的行 P S 获得第一个显示的字符串就足够了 您想使用 RichTextBox GetCharIndexFrom
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能

随机推荐