制作Makefile

2 投票
6 回答
1526 浏览
提问于 2025-04-15 12:50

我想知道怎么制作一个Makefile,因为这是分发源代码程序的最佳方式。请记住,这个是针对C++程序的,而我刚开始接触C开发的世界。不过,我想知道是否也可以为我的Python程序制作Makefile?

6 个回答

4

一个简单的 Makefile 通常由一组目标、它们的依赖关系,以及每个目标要执行的操作组成:

all: output.out

output.out: dependency.o dependency2.o
    ld -o output.out dependency.o dependency2.o

dependency.o: dependency.c
    gcc -o dependency.o dependency.c

dependency2.o: dependency2.c
    gcc -o dependency2.o dependency2.c

在这个例子中,目标 all 是第一个目标。当你在 make 命令中没有指定任何目标时,它会尝试构建它的依赖项,如果这些依赖项不存在或者不是最新的,就会进行构建。

6

我在一些Python项目中使用Makefile,但这其实有点不太靠谱……我做的事情像是:

SITE_ROOT=/var/www/apache/...

site_dist:
     cp -a assets/css build/$(SITE_ROOT)/css
     cp -a src/public/*.py build/$(SITE_ROOT)

等等。Makefile其实就是一种批处理执行系统(而且还挺复杂的)。你可以像使用GCC一样,使用你平常的Python工具(来生成.pyc文件等)。

PY_COMPILE_TOOL=pycompiler

all: myfile.pyc
     cp myfile.pyc /usr/share/python/...wherever
myfile.pyc: <deps>
     $(PY_COMPILE_TOOL) myfile.py

然后

$ make all

等等。只要把你的操作当成其他任何操作来处理就行。你的pycompiler可能很简单,比如:

#!/usr/bin/python
import py_compile
py_compile.compile(file_var)

或者是某种变体

$ python -mcompileall .

其实都是一样的。Makefile没什么特别的,只是自动执行和检查文件是否需要更新的功能。

11

从你的问题来看,似乎了解一下Makefile的基本知识或者教程会对你有帮助。

一个很好的起点是查看GNU Make的文档。

里面有这样一个概述:“make工具会自动判断一个大程序中哪些部分需要重新编译,并发出命令去重新编译它们。”

它的前三章内容包括:

  1. make的概述
  2. Makefile入门
  3. 如何编写Makefile

撰写回答