【问题标题】:MakeFile error in Unix [closed]Unix中的MakeFile错误[关闭]
【发布时间】:2018-01-06 09:58:53
【问题描述】:

我在执行 makefile 时遇到问题。我正在尝试从 yesno.cpp 和guess.cpp 制作一个“猜测”文件。我要从前面提到的文件中创建一个 yesnno.o 文件和guess.o 文件。我的代码如下:

g++ -c -DDEBUG yesno.cpp
g++ -c -DDEBUG guess.cpp

然后我应该链接这 2 个 .o 文件并创建一个名为guess 的可执行程序。我的代码如下:

g++ -o guess guess.o yesno.o

这会在我的目录中创建包含以下文件的猜测文件:

guess guess.cpp guess.o yesno.cpp yesno.h yesno.o

在我尝试提交之前一切似乎都很好,但我一直收到错误消息:

"make: *** No targets specified and no makefile found. Stop.

Your makefile does not build 'guess' when invoked"

我不确定我做错了什么。请帮忙!

【问题讨论】:

  • 你的 Makefile 包含什么?你甚至有一个Makefile吗?或者你是否试图从字面上运行你的 Makefile?你试过了吗:make
  • 你做错了什么是问一个关于你的Makefile的问题,但没有显示你的Makefile的一行,我想每个人都猜到里面有什么。
  • 我想我没有makefile。我认为makefile 是由guess.o 和yesno.o 创建的猜测文件。它说我应该创建一个 makefile 来编译 yesno.cpp 和guess.cpp 以生成文件guess.o 和yesno.o。
  • 不,这不是makefile。
  • 你知道如何构建guess(使用上面的三个命令)。 Make 是一种工具,可让您通过 Make 读取的脚本(称为 makefile)自动执行某些任务(例如构建文件)。学习编写 makefile 需要一些时间和精力。

标签: c++ linux unix makefile


【解决方案1】:

makefile 是程序make 用来构建项目的文件。尝试在您的目录中创建一个名为 Makefilemakefile 的文件,其中包含以下内容。

CXX = g++

.PHONY: all

.SECONDARY:

all: guess

guess: guess.o yesno.o
    $(CXX) -o $@ $^

%.o: %.cpp yesno.h
    $(CXX) -c -DDEBUG $<

要构建您的项目,请运行 make。您可以运行,例如,make -j2 以并行运行最多 2 个作业。

【讨论】:

    【解决方案2】:

    我对生成文件感到困惑。您实际上必须在您所在的目录中创建一个makefile。

    makefile创建后,需要在makefile里面输入参数。

    这是一个优秀的视频,向我指出了有关 makefile 的内容: https://www.youtube.com/watch?v=aw9wHbFTnAQ

    感谢您的帮助!

    【讨论】:

    • “在你所在的目录中”,我猜你的意思是“在 Make 使用的目录中”——这是 make 进程的工作目录,除非通过使用-C 选项(GNU Make)。
    【解决方案3】:

    Make 具有从 C++ 源代码创建目标文件和链接目标文件的默认规则。这意味着一个完整的 Makefile 就像这样简单:

    CXXFLAGS = -Wall -Wextra -DDEBUG
    
    guess: LINK.o = $(LINK.cc)
    guess: guess.o yesno.o
    
    .DELETE_ON_ERROR:
    

    注意事项:

    • 我已经包含了您从编译命令中忘记的-Wall-Wextra 可以发现您的代码的更多问题,我推荐它。
    • LINK 行确保您的程序链接为 C++,而不是 C(不同的标准库)。
    • .DELETE_ON_ERROR 应该在您编写的每个 Makefile 中:它可以防止在构建中断时出现半编译的目标代码。
    • 我假设是 GNU Make,因为目标是

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2011-05-05
      • 2011-02-20
      相关资源
      最近更新 更多