【问题标题】:Make: *** multiple target patterns. Stop制作:*** 多个目标图案。停止
【发布时间】:2013-01-08 23:04:06
【问题描述】:

我目前正在使用 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 进行检查和评分,我相信我的导师也会喜欢这种便利。

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

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

【问题讨论】:

  • 这个问题实际上是关于Make(或Eclipse)而不是编译器,所以我重新命名了它并重新标记了它,以便让有正确知识的人更好地了解它。
  • 问题正是C:/ 应该是/cygdrive/c/。 Make 将冒号解释为定义目标模式;当一行中有多个冒号时,会出现multiple target patterns 错误。您可能必须为.d 文件的任何输出编写一个包装脚本,或者作为构建系统的一部分的后处理步骤,执行自动搜索和替换,将C:/ 转换为/cygdrive/c/。跨度>

标签: makefile cygwin eclipse-cdt


【解决方案1】:

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

【讨论】:

  • 我相信我必须将构建器从外部重置为内部,或者反过来。我不确定这实际上是如何改变的——可能是我在计算机之间移动项目时。
【解决方案2】:

您还可以在使用外部“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 上的第一篇文章,所以如果我犯了任何礼仪错误,那都是无意的 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多