如果这个问题已经被问过,我深表歉意。寻找起来并不容易。
make设计时假设 Makefile 有点像神一样。它对您项目的未来了如指掌,除了添加新的源文件之外,永远不需要任何修改。这显然是不正确的。
我曾经使 Makefile 中的所有目标都依赖于 Makefile 本身。这样,如果我更改 Makefile 中的任何内容,整个项目都会重建。
这有两个主要限制:
make CFLAGS=-O3.我看到了几种正确执行此操作的方法,但乍一看似乎没有一种方法令人满意。
但所有这些解决方案都需要一种不常见的编写方法。要么将整个规则作为字符串放入变量中,要么将配方包装在一个可以发挥一些魔力的函数中。
我正在寻找一种以尽可能简单的方式编写规则的解决方案。尽可能少的额外垃圾。人们通常如何做到这一点?
我有为多个平台编译的项目。当构建之前为不同架构编译的单个项目时,可以手动强制重建。然而,在为 OpenWRT 编译所有项目时,手动清理是难以管理的。
我的解决方案是创建一个标识平台的标记。如果丢失,一切都会重新编译。
ARCH ?= $(shell uname -m)
CROSS ?= $(shell uname -s).$(ARCH)
# marker for the last built architecture
BUILT_MARKER := out/$(CROSS).built
$(BUILT_MARKER) :
@-rm -f out/*.built
@touch $(BUILT_MARKER)
build: $(BUILT_MARKER)
# TODO: add your build commands here
Run Code Online (Sandbox Code Playgroud)
如果您的标志太长,您可以将它们减少为校验和。