【问题标题】:C++ My first time trying to use a Makefile. It won't workC++ 我第一次尝试使用 Makefile。它不会工作
【发布时间】:2021-03-24 18:22:00
【问题描述】:

我正在尝试为一个包含 3 个文件和 Makefile 的简单项目创建一个 Makefile。当我编译时,控制台显示 L: make: Nothing to be done for 'all'。什么都没有发生

代码:

math: main.o function.o
    g++ main.o function.o -o math

main.o: main.cpp
    g++ -c main.cpp

function.o: function.cpp
    g++ -c function.cpp

clean:
    rm *.o math

有人知道这个问题的解决方案吗?谢谢!我的 IDE 是 Eclipse 仅供参考

【问题讨论】:

  • 这意味着目标的时间戳晚于源。先做个清洁。 make clean 后跟 make。我没有看到对头文件的依赖。如果您修改头文件,您将希望重建所有源文件(目前它们不会)。我也没有看到all 目标(这是一种传统但不是必需的,但需要执行make all

标签: c++ eclipse makefile


【解决方案1】:

我建议在 Makefile 的末尾添加这样一行:

all: math

【讨论】:

  • 感谢您的回复!这是有道理的
【解决方案2】:

我的 IDE 是 Eclipse 仅供参考

这是一个关键细节。您将问题埋在问题末尾的半括号评论中,对自己和他人造成了伤害。

当我编译时,控制台显示L: make: Nothing to be done for 'all'。

您的 IDE 对 makefile 约定有一些特定的期望,而您的 makefile 不满足它们。特别是,显示的消息表明它正在尝试构建一个名为“all”的目标。您的 makefile 没有提供构建任何此类目标的规则。尽管在一般意义上不需要,makefile 通常会提供一个名为“all”的目标作为顶级入口点。在提供此目标的 makefile 中,构建它应该构建整个项目,测试和仅支持测试的目标可能除外。

您可以通过添加预期目标来解决此问题。相对于其他规则,它可以去任何地方,但最传统的做法是把它放在第一位。此外,将其声明为.PHONY(参见What is the purpose of .PHONY in a makefile?)是一个好主意,尽管不是必需的:

all: math

math: main.o function.o
    g++ main.o function.o -o math

main.o: main.cpp
    g++ -c main.cpp

function.o: function.cpp
    g++ -c function.cpp

clean:
    rm *.o math

.PHONY: all

【讨论】:

    【解决方案3】:

    我在我的 Linux 系统上试了一下,它工作正常。

      1 .PHONY: math
      2 math: main.o function.o
      3     g++ main.o function.o -o math
      4
      5 main.o: main.cpp
      6     g++ -c main.cpp
      7 function.o: function.cpp
      8     g++ -c function.cpp
      9
     10 clean:
     11     rm *.o, math
    

    在命令行之前,应该存在一个选项卡。 enter image description here

    【讨论】:

    • 感谢您的回复! .PHONY 有什么用?
    • @RatTaco, .PHONY 在这里不合适,我认为没有理由认为它的添加会对您产生影响。有关详细信息,请参阅What is the purpose of .PHONY in a makefile?
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    相关资源
    最近更新 更多