【问题标题】:Makefile basicsMakefile 基础知识
【发布时间】:2012-03-18 21:44:38
【问题描述】:

我在 makefile 的基础知识方面遇到问题。

我用gcc编译

我需要做的是制作一个名为labMakefile的makefile,目标是

lab
labM.o
labG.o
clean

我正在处理的文件夹中已有的文件包括

labM.c
labM.o
labG.c
labG.o

我一直在查看 makefile 教程,但似乎找不到创建 makefile 的正确方法

我尝试过的

labMakefile: labM.o labG.o

但它只是说labMakefile:: command not found

【问题讨论】:

  • 我怀疑它会给你那个错误信息,因为它的大小写不同。除非,当然...
  • 我认为make -f labMakeFile lab
  • 好吧,你的makefile被称为labMakefile(显然),而不是labMakeFile,所以有一个问题。第二个问题是您要求它构建目标lab,但您的makefile 没有任何名为lab 的目标。
  • 抱歉打错了。是的,您对目标 lab 的看法是正确的,但问题中已说明,因此让我感到困惑:x
  • 啊,对不起,我看错了你的问题。好的,您需要编辑您的问题以包含您的 Makefile(请尽可能简短)。

标签: c makefile


【解决方案1】:

makefile 是由 Make 运行的脚本。它只是一个用 Make 需要的严格语法编写的文本文件,就像源代码一样(尽管它是解释的,而不是编译的)。您可以使用任何您喜欢的文本编辑器来创建它。

您使用的是 C(根据文件名的后缀判断)。所以要从labM.c 创建labM.o 你可能会使用类似的命令

gcc -c labM.c -o labM.o

(并不是真的需要 -o labM.o,它是默认行为,我只是想稍微说明一下。)同样构建 labG.o 你会使用

gcc -c labG.c -o labG.o

然后(我猜)你会将它们链接在一起以构建实验室:

gcc labM.o labG.o -o lab

有时你想清除构建的文件:

rm -f *.o lab

因此,要完成所有这些,您需要编写一个名为 Makefile 的生成文件,如下所示(注意前导空格是 TAB):

labM.o:
    gcc -c labM.c -o labM.o

labG.o:
    gcc -c labG.c -o labG.o

lab:
    gcc labM.o labG.o -o lab

.PHONY:clean
clean:
    rm -f *.o lab

那么你可以make labmake cleanmake labM.o labG.o。如果你真的想调用这个 makefile labMakefile,你可以这样做,但是你必须这样做,例如make -f labMakefile lab这个makefile很粗糙但是很有效。它可以大大改进:

CC = gcc

lab: labM.o labG.o
    gcc $^ -o $@

lab%.o: lab%.c
    $(CC) -c $< -o $@

.PHONY:clean
clean:
    @echo cleaning things up, boss...
    @rm -f *.o lab

这将更好地处理依赖关系:如果你修改labM.c而不是labG.c,然后make,Make会知道labM.o(和lab)必须重建,但labG.o不需要是。

这是一个很好的开始。

【讨论】:

  • 我已经有了labM.o,为什么还要从labM.c创建呢? labM.o: gcc -c labM.c -o labM.o labG.o: gcc -c labG.c -o labG.o lab: gcc labM.o labG.o -o lab .PHONY:clean clean: rm -f *.o lab 是在 labMakefile 中吗?
  • @JA3N,如果你想只创建一次lab,你不需要一个makefile,就像gcc labM.o labG.o -o lab一样。 makefile 使该过程自动化,以便您可以修改源代码,然后只需修改make。是的,所有这些都在 labMakefile 中。
  • 构建对象的模式规则是内置的,你不需要包含它。
  • @blueshift:我知道,这是教学法。
【解决方案2】:

要运行makefile,您必须调用“make”

如果您的 makefile 没有标准名称(makefile 或 Makefile),您应该使用 -f 参数指定它:

make -f labMakefile

【讨论】:

  • 如果我在里面输入make: labMakefile: No such file or directory make: *** No rule to make target labMakefile. Stop.
  • 谁,你没有告诉我足够多的!您的 makefile 的名称是什么?在哪个目录。不要忘记 cd 到正确的目录,然后使用“make -f replaceThisStringWithTheNameOfYourMakefile”调用make
  • 我的makefile的名称应该是labMakefile,我想我还没有做到……这是我遇到的问题之一。对不起,如果我没有提到这一点
  • 我说的是你的文件名,(不是你的目标,也是labMakefile)。你的 makefile 的 filename 是什么?在哪个目录?你cd path/to/dir了吗?
  • 这一切都在一个名为lab9的文件夹中完成。你是什​​么意思 labMakefile 是一个目标?问题是写一个名为labMakefile的makefile:x
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 2014-04-16
  • 2018-05-25
  • 2014-11-28
  • 2014-02-14
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多