0

我有三个文件:main.c、foo.c 和 foo.h。我想知道如何为此制作最简单的makefile?我以前从未制作过makefile,我尝试过的一切都只是给我错误。另外,文件应该是什么样的扩展名?我现在把它保存为makefile.c。

谢谢。

我试过这个:

all: main.c foo.c
    gcc main.c foo.c -o main

当我使用 make 命令时,我得到了大量的错误。

4

3 回答 3

1

在如此干净的设置中,您根本不需要 makefile - 如果您使用makepp。只需调用makepp main(不覆盖任何内置规则)将发送它寻找构建它的源,例如main.cpp或在您的情况下main.c#include每次包含显着更改(即不仅仅是重新格式化或注释更改)时,它都会扫描它以查找语句并重建。

巧妙的是,在链接时它会将标头视为链接任何匹配模块的提示,在您的情况下foo.o,它将从foo.c. 这可以递归地工作,例如,如果foo.c包含bar.h,它也会考虑bar.o链接。

makepp 还有很多。除了做 GNU make 能做的几乎所有事情,还有很多有用的东西,你甚至可以用一些 Perl 编程来扩展你的 makefile。

于 2013-05-01T16:47:23.010 回答
0

我可能会写这样的东西(我不是 100% 了解所有隐含规则,所以我只是保持简单):

all: main            # all depends on the program (put it first so `make` == `make all`)
main: main.o foo.o   # main depends on its objects
    gcc main.o foo.o -o main    # create the program by linking the object files
foo.o: foo.c foo.h   # the foo object depends on its .c and .h files
                     # the main object implicitly depends on its .c file

确保命令部分使用TAB字符而不是空格缩进。在某些编辑器中(在某些配置中),您必须键入ctrl+V然后TAB.

另存为makefile没有扩展名。

于 2013-05-01T16:33:04.523 回答
0

满足您需要的简单 Makefile 就像


obj -m := main.o foo.o

并将其另存为Makefile没有扩展名,因为make-files不能有任何扩展名

于 2013-05-01T16:27:46.880 回答