我可以为单个 C 文件工作的最简单的 MAKEFILE 是什么?

发布于 2024-10-05 08:02:34 字数 88 浏览 1 评论 0原文

我有一个名为“main.c”的文件。我可以将此文件编译成可以像 ./blah 一样运行的可执行文件的最简单的 Makefile 是什么?

I have a file called "main.c". Whats the simplest Makefile I can have to compile this file into an executable that I can run like ./blah?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

枫林﹌晚霞¤ 2024-10-12 08:02:34
all:
     gcc -o blah main.c

这里不需要 makefile,简单的 shell 脚本就可以了。

all:
     gcc -o blah main.c

You don't need makefile here, simple shell script is OK.

梦在夏天 2024-10-12 08:02:34

如果您正在运行 GNU Make 并且不需要链接额外的库,那么最简单的 makefile 根本就是没有 makefile。尝试:

make main

如果您不想指定 main,那么您可以使用以下一行 Makefile:

all: main

GNU Make 有几个隐式规则,如果您自己不定义它们,它就会使用它们。使这项工作有效的方法类似于:

%: %.c
        $(CC) $^ -o $@

有关更多信息,请参阅: http://www.gnu.org/software/make/manual/make.html#Using-Implicit

If you're running GNU Make and if you don't need to link in extra libraries, the simplest makefile is no makefile at all. Try:

make main

If you don't want to have to specify main, then you can use the following one-line Makefile:

all: main

GNU Make has several implicit rules that it uses if you don't define them yourself. The one that makes this work is something like:

%: %.c
        $(CC) $^ -o $@

For more info, see: http://www.gnu.org/software/make/manual/make.html#Using-Implicit

不再见 2024-10-12 08:02:34
all: blah
blah: main.c
    gcc main.c -o blah
all: blah
blah: main.c
    gcc main.c -o blah
可可 2024-10-12 08:02:34

我建议的最简单的方法是:

myprog: myprog.o
        $(CC) -o $@ @^

通过隐式规则,这将导致在链接之前将 myprog.c 编译为 myprog.o 的单独步骤。我比其他答案(Arnaud)更喜欢这个的原因是它可以扩展到更多源文件,而不必显着扩大 makefile:

myprog: myprog.o foo.o bar.o helper.o my.o your.o his.o her.o
        $(CC) -o $@ @^

The simplest I would recommend is:

myprog: myprog.o
        $(CC) -o $@ @^

Via implicit rules, this will result in a separate step that compiles myprog.c to myprog.o before linking it. The reason I like this better than the other answer (by Arnaud) is that it scales to more source files without having to enlarge the makefile significantly:

myprog: myprog.o foo.o bar.o helper.o my.o your.o his.o her.o
        $(CC) -o $@ @^
蓝眸 2024-10-12 08:02:34

正如 Jander 所说,如果您的源代码是一个名为 blah.c 的文件,您可以使用它来输出名为 blah 的可执行文件:

all: blah

甚至:

blah:

使用 GNU 时,其他所有内容都是隐式的make

虽然这非常简单,但它确实比一些更复杂的答案有一些优势:

  • 编译器不是硬编码的:让您的环境为您选择 gcc
  • 您的程序名称仅设置一次,这是一种良好的 DRY 编程实践。
  • 不创建此简单项目不需要的中间 *.o 文件。

也就是说,我强烈建议您通过至少添加 cleanall 规则以及 -Wall 来改进您的 Makefile旗帜。这可以通过以下 Makefile 来完成,仍然保留上述所有优点:

TARGET=blah
CFLAGS=-Wall

.PHONY: all clean

all: $(TARGET)

$(TARGET):

clean:
    rm -f $(TARGET)

As Jander said, if your source is a single file named blah.c you could use this to output an executable named blah:

all: blah

Or even:

blah:

Everything else is implicit when using GNU make

While this is extremely simple, it does have a few advantages over some of the more complex answers:

  • Compiler is not hardcoded: let your environment choose gcc for you!
  • Your program name is set only once, a good DRY programming practice.
  • Does not create intermediate *.o files which are not needed for this simple project.

That said, I strongly suggest you to improve your Makefile by adding at least clean and all rules and -Wall flags. This can be done with the following Makefile, still keeping all the above advantages:

TARGET=blah
CFLAGS=-Wall

.PHONY: all clean

all: $(TARGET)

$(TARGET):

clean:
    rm -f $(TARGET)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文