
make
最新かどうかにかかわらず、FreeBSDが私が指定したターゲットを強制的に実行したいと思います。
私はGNU makeのフラグを使って行うことができることを知っていますが、-B
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: ...
すべての既存の宛先に偽属性を割り当てます。これにより、すべてのターゲットが古いと見なされ、bmakeが最新であるかどうかにかかわらずそのターゲットを実行できます。.include "./Makefile"
実際のメイクファイルが含まれています。bmake -f -
makefile
bmakeに、通常のsumの代わりに標準入力としてmakefileを取得するように指示しますMakefile
。
これにはさまざまなエッジケースがありますが、小規模なプロジェクトには十分です。それにもかかわらず、GNU Makeの-B
フラグは複雑なコードベースにはあまり役に立ちません。ただし、bmakeにGNU Makeスタイルのフラグがないことは、-B
明確な回避策がない制限です。