【问题标题】:Eclipse CDT project for code base with many binaries?具有许多二进制文件的代码库的 Eclipse CDT 项目?
【发布时间】:2019-10-28 21:12:16
【问题描述】:

我的组织拥有庞大的 C/C++ 代码库。我们从这个代码库的子集构建了许多二进制文件,包括生产和测试二进制文件。有许多构建变体。相同的 C/C++ 源文件在不同的二进制文件中使用不同的 -I 和 -D 编译器标志进行编译。示例:二进制“test1”可能会使用一组 -I 和 -D 标志编译“file.c”,而“test2”则使用其他标志编译同一文件。

如何为这样的代码库设置 Eclipse CDT 项目?

我们尝试了两种方法,都相当不成功:

  1. 为每个二进制文件创建一个项目,并使用其 -I 和 -D 标志。

  2. 使用所有二进制文件中的所有 -I 和 -D 的联合创建一个项目。

【问题讨论】:

  • 您对项目设置有什么要求?您是否希望使用 CDT 的托管构建来构建项目,或者您只是希望 Eclipse 中的构建功能调用现有的构建脚本,如 make?您是否希望能够以不同的模式打开“file.c”(例如“file.c as built for test1”与“file.c as built for test2”)并看到不同的东西(例如标记的不同部分作为非活动的预处理器分支)?
  • 我们正在使用 Build 功能从命令行构建项目。 (也就是说,我们没有使用托管构建。)我们的主要用例是代码浏览。 Eclipse 可以找到几个同名的 .h 文件,或者在不同的 .c 文件中找到多个定义,用户可以在尝试打开定义时选择打开哪个文件。但理想情况下,定义应该是正确的,即正确的#ifdef 应该被标记为活动的。

标签: eclipse eclipse-cdt


【解决方案1】:

根据您描述的要求,我认为最适合使用 CDT 的 Build Output Parser。我在this previous answer写了如何使用的解释。

基本上,构建输出解析器会调用您的构建脚本,并解析其输出以推断每个源文件的正确设置(-I 和 -D 标志)。

关于在多个配置中解析文件的说明:CDT 支持头文件,但不支持非头源文件(例如.c 文件)。因此,如果您有一个头文件header.h,其中包含一些#ifdefs,并且包含在两个不同的源文件file1.c 和file2.c 中,并且在包含点定义了不同的宏——那么您可以打开@987654327 @ 来自file1.c 中的#include 并获得“header.h 包含在file1.c”中的正确视图,其中正确的部分全部显示为灰色。但是,如果file1.c 本身是在两种不同的模式下编译的,我怀疑构建输出解析器只会选择其中一种,而您无法在该模式下查看它。

【讨论】:

  • 感谢您的回答!不幸的是,我们使用了一个不记录原始编译器命令的构建系统。是否有任何其他标准方法可以找到 -I 和 -D 标志?我们可以在我们的构建系统中实现一个查询(比如make query ...)来记录构建中的所有 -I 和 -D 标志。
  • @MagnusAndersson 就是这样:您的构建脚本默认情况下不需要记录原始编译器命令,它只需要一个选项即可。然后,您只需更改项目属性中的“构建命令”-> C/C++ 构建-> 构建器设置”以包含该选项。
  • 好的!我将尝试构建输出解析器。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2012-08-21
  • 2012-07-21
相关资源
最近更新 更多