【问题标题】:Project dependency in Eclipse CDTEclipse CDT 中的项目依赖关系
【发布时间】:2011-10-11 15:50:42
【问题描述】:

我是第一次使用 Eclipse。我是一位经验丰富的 VisualStudio 用户,所以我试图在 eclipse 中找到类似的功能。我有两个项目,A 和 B。项目 A 在编译完成后会吐出 libA.a。项目 B 链接到 libA.a。这是我的问题。

  1. 我编译项目 A 然后项目 B,一切都很好。
  2. 我对项目 A 进行了代码更改,需要构建项目 A。
  3. 我尝试构建项目 B,但它表明未检测到任何更改。

如何让项目 B 知道项目 A 的输出?目前,我必须对项目 B 进行干净构建,才能重新链接到 libA.a。

谢谢。

编辑:在我的 ProjectB->Path and Symbols->References 选项卡中,我检查了项目 A。这不会在项目 A 重建后重新链接。

【问题讨论】:

  • 澄清一下,我说的是重新链接而不是重新编译项目 B。

标签: c++ eclipse


【解决方案1】:

尝试以下设置:

  1. 转到主项目的属性C/C++ 常规路径和符号参考
  2. 勾选所有依赖项。

【讨论】:

  • 这几乎奏效了,我还必须转到库项目的导出设置页面并从那里的选项卡中删除所有条目(包括、符号、库、库路径)。如果此页面(导出设置页面)丢失,请在 Window > Preferences > C/C++ > Property Page Settings 下启用它。此信息来自:help.eclipse.org/juno/topic/org.eclipse.cdt.doc.user/tasks/…
  • 按照上述步骤工作。但是 Eclipse 会生成一个使用绝对路径的 makefile。 (例如 myExe: $(OBJS) /root/proj2/Release/libProj2.a)。有没有办法让Eclipse生成相对路径,比如“../../proj2/Release/libProj2.a”?
  • 一句警告,这是非常重的操作。如果您正在设置一个新项目,那就去做吧,但是如果您有一个现有项目,其中有很多设置可以工作,那么在使用它时要小心。 Eclipse 会更新你的链接器路径和设置(可能还有很多其他的东西),所以如果你决定以后不使用它,你会发现 eclipse 已经删除了很多你以前存在的设置。
【解决方案2】:

您进入项目 B 的项目属性,选择项目引用并使其引用(依赖)项目 A。

编辑,似乎是一个已知的bug

【讨论】:

  • 我这样做了。如果项目 A 过期,这允许项目 B 重新编译项目 A。如果项目 B 不需要重新编译,如果有新的输出可用,它将不会重新链接到项目 A 的输出。
【解决方案3】:

可以使用touch 命令解决此问题。

在 Eclipse 中,作为 C/C++ 构建/设置的一部分,是选项卡“构建步骤”。在预构建步骤命令行中,输入touch filename

filename 是您应用程序中的任何文件。这可能是带有main() 的文件。这可能是一个专门用于此解决方法的特殊文件,touchdummy.c,它可以是一个可以快速编译的小文件。

在构建应用程序时,即使您没有更改任何源,touch 命令也会使 make 重新构建应用程序。如果库已重建,则应用程序将使用新库重建。

您可以在此处了解touch 如何影响文件的日期/时间。 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html

编辑:Eclipse 中的确切命令是 touch ${ProjDirPath}/src/main.c

编辑:这个命令应该可以工作,但似乎如果“主”项目没有改变,则不会执行预构建步骤。此外,touch 命令会导致 eclipse 提示重新加载它所触及的文件。一个很大的烦恼。

【讨论】:

    【解决方案4】:

    Eclipse 项目通过项目属性(依赖项目?)中的复选框相互依赖,这是 Eclipse 决定构建哪个项目的方式。您可以自行设置,但通常在您更改 Java 构建路径时设置。

    【讨论】:

    • 我这样做了,项目 B 构建了项目 A。但是,当项目 A 过期时,项目 B 不会链接到项目 A 的输出,因为项目 B 不必重新编译。我只是指链接而不是编译。
    【解决方案5】:

    默认情况下,至少对于 QNX C++ 项目,它不会检查其他项目中的更改。 右键单击项目,然后展开“检查依赖项开/关”->“仅检查用户标头” 它似乎工作,大致... 它似乎对代码进行了 makedepends,并将 *.d 文件添加到输出文件夹中,这些文件只是列出头文件的依赖文件。 注意:这些似乎没有重新生成,并且已经过时 - 我不知道如何重新生成它们。

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2012-12-17
      • 1970-01-01
      • 2011-10-19
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2010-11-26
      相关资源
      最近更新 更多