我想强制make
FreeBSD 执行我指定的目标,无论它是否是最新的。
我知道可以使用-B
GNU make 中的标志来完成,但我在 FreeBSD make 手册页中找不到类似的内容。
答案1
如果你只想要一些目标(并且总是),你可以使用 代替!
,:
检查:
target! source
touch target
如果您尝试,即使比 更新,make target
也会运行。touch target
target
source
检查人做:
FILE DEPENDENCY SPECIFICATIONS Dependency lines consist of one or more targets, an operator, and zero or more sources. This creates a relationship where the targets ``depend'' on the sources and are usually created from them. The exact relationship between the target and the source is determined by the operator that sep- arates them. The three operators are as follows: ... ! Targets are always re-created, but not until all sources have been examined and re-created as necessary. Sources for a target accumu- late over dependency lines when this operator is used. The target is removed if make is interrupted.
答案2
好吧,经过近 5 年的时间,我找到了一种方法来强制 bmake 做我想做的事情(至少在大多数情况下)。
似乎gmake -B
bmake 的潜在等价物是:
printf '%s\n' ".PHONY: $(bmake -V .ALLTARGETS)" ".include \"./Makefile\"" | bmake -f -
以下是该代码片段的作用:
$(bmake -V .ALLTARGETS)
获取 bmake 已知的所有目标的列表。这是我最喜欢的 bmake 功能之一。能够向 bmake 询问用户可以指定的目标的完整列表是非常方便的。.PHONY: ...
将 phony 属性分配给所有现有目标。这样,所有目标都将被视为过时,这将导致 bmake 执行它们,无论它们是否是最新的。.include "./Makefile"
包括实际的 makefile。bmake -f -
告诉 bmake 在标准输入上获取其 makefile,而不是通常的makefile
和Makefile
。
这里有各种边缘情况,但对于小型项目来说已经足够了。无论如何, GNU Make 的-B
标志对于复杂的代码库来说并不是很有用。然而,bmake 中缺少 GNU Make 风格-B
标志是一个限制,没有明确的解决方法。