代码之家  ›  专栏  ›  技术社区  ›  Ash

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

  •  13
  • Ash  · 技术社区  · 14 年前

    我有一个叫“main.c”的文件。什么是最简单的Makefile我可以把这个文件编译成一个可以运行的可执行文件 ./blah ?

    5 回复  |  直到 14 年前
        1
  •  12
  •   Mariy    14 年前
    all:
         gcc -o blah main.c
    

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

        2
  •  10
  •   Jander    14 年前

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

    make main
    

    如果您不想指定 main ,然后可以使用以下单行生成文件:

    all: main
    

    GNU Make有几个隐含的规则,如果您不自己定义它们的话,它就会使用这些规则。使这项工作成功的是:

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

    有关详细信息,请参见: http://www.gnu.org/software/make/manual/make.html#Using-Implicit

        3
  •  4
  •   Arnaud Meuret    14 年前
    all: blah
    blah: main.c
        gcc main.c -o blah
    
        4
  •  2
  •   R.. GitHub STOP HELPING ICE    14 年前

    最简单的建议是:

    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 $@ @^
    
        5
  •  0
  •   MestreLion    10 年前

    正如詹德所说,如果你的来源是一个名为 blah.c 可以使用此命令输出名为 blah :

    all: blah
    

    甚至:

    blah:
    

    在使用GNU时,其他一切都是隐式的 make

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

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

    也就是说,我强烈建议你改进 Makefile 通过至少添加 clean all 规则和 -Wall 旗帜。这可以通过以下方法完成 生成文件 ,仍然保留上述所有优点:

    TARGET=blah
    CFLAGS=-Wall
    
    .PHONY: all clean
    
    all: $(TARGET)
    
    $(TARGET):
    
    clean:
        rm -f $(TARGET)