2

我目前正在使用 Eclipse Juno 以及 CDT 和 Cygwin C++ 开发一个介绍性 C++ 项目。我正在使用 MVC 架构,并且刚刚获得了可以运行可执行文件并查看一些结果的代码。当我构建应用程序时,编译器不会抛出任何错误;但是,当我通过 Eclipse 运行应用程序时,应用程序会重新构建并显示以下错误:

make: *** multiple target patterns.  Stop.  GasFinderTUI.d KyleGasStationFinder/Debug/src/View  line 1  C/C++ Problem

这是该文件中的代码:

src/Controller/GasFinderController.d src/Controller/GasFinderController.o:  \
 ../src/Controller/GasFinderController.cpp \
  ../src/Controller/GasFinderController.h \
  C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/LocalGasStations.h \
  C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/GasStation.h \
  C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/GasPump.h \
  C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/Utilities.h

../src/Controller/GasFinderController.h:

C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/LocalGasStations.h:

C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/GasStation.h:

C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/GasPump.h:

C:/Users/Kyle/Dropbox/Workbench/KyleGasStationFinder/src/Model/Utilities.h:

我已经尝试清理和重建,而不使用 run 功能,并且应用程序构建得很干净。我还在没有 Eclipse 的情况下运行了实际的 .exe 文件,并且应用程序按预期运行。尽管与 Eclipse 分开运行应用程序是一种可接受的替代方案,但我将在不久的将来用 C++ 编写几个应用程序,并且希望能够从 Eclipse 中执行。这些应用程序也将使用 Eclipse 进行检查和评分,我相信我的导师也会喜欢这种便利。

我看过这个问题,它建议将 C:/ 更改为相对路径名或 /cygwin/c/。我的其他 .d 文件以及我的包含路径使用相对路径,这些文件没有问题。尽管我相信这两种解决方案都可以工作,但每次编译都会重新创建 .d 文件。我所做的所有更改都已在每次构建时被覆盖。

Eclipse 和/或 Cygwin C++ 是否包含任何可能允许我防止这种并发症在未来发生的设置?

4

2 回答 2

3

我发现我可以在 Eclipse 中运行该项目,前提是我在每次运行之前手动清理它。此外,如果我在每次构建之前手动清理它,构建就会成功。提交此作业后,我将考虑创建用于编译的自定义脚本。

于 2013-01-27T00:06:40.983 回答
1

使用外部“Gnu Make”构建器时,您还可以删除“多个目标模式”错误。我将 Eclipse Kepler 与 CDT 8.3.0 一起使用,并执行了以下操作:

  1. 在所有构建配置的包含路径中,即在项目属性 | C/C++ 构建 | 设置 | Cygwin C [或 C++] 编译器 | 包括,
  2. 放置每个所需包含路径的 2 个版本,Cygwin 样式后跟 Windows 样式,例如
    /cygdrive/d/cygwin64/usr/share/whatever/include
    D:/cygwin64/usr/share/whatever/include
  3. 这会导致每个构建配置的源目录中的依赖文件 (*.d) 使用依赖项中的 Cygwin 样式路径,从而消除上述错误,因为这些文件中的冒号“:”字符导致它,如@andrewdotn 说。
  4. 这也允许 CDT 在 C/C++ 源文件中查找包含文件,因为它通常在搜索 Windows 样式的包含路径时找到它们(注意:我使用 Cygwin 作为我的构建工具链,而不是 MinGW)。

我意识到上述内容特定于特定的工具链设置,但至少它提供了一种可能的替代方法来让托管的 Make 项目正常工作。

顺便说一下,这是我在 StackOverflow 上的第一篇文章,所以如果我犯了任何礼仪错误,那都是无意的 :)

于 2015-01-02T03:59:29.913 回答