2009-04-20 32 views
5

(現在)小さなCプロジェクトで単体テストのサポートを構築しようと試みて、ページの指示に従っています。私はCheckの代わりにCgreenを使用していますが。GNU make%スタイルパターンルールの移植可能なファイル

私はautomakeがGNU make拡張である `% 'スタイルのパターンルールの使用に関する警告を出す原因となっているステップ9に問題があります。

特定のメークルールは次のとおりです。

check_%.$(OBJEXT) : $(srcdir)/%.c 
    $(COMPILE) -DCHECKING -c -o [email protected] $^ 

GNUのmakeの拡張機能に依存しないこのルールを指定するのと同じ方法がある場合、私は思ったんだけど。

答えて

7

ポータブルmakeルールでは、異なる接尾辞しか使用できません。接頭辞は同じである必要があります。

.c.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 

ただし、接尾辞は必ずしもドットで始まるわけではありません。 (その場合、あなたはそれを推測することができないので、あなたのサフィックスが何であるかはAutomakeを伝える必要があります)ですから、何かを持っている可能性があり、たとえば、あなたが名前を変更する場合は、次のようにcheck_showdns.oshowdns_check.oへ:

SUFFIXES = _check.o 
check_libapdns_LDADD  = @[email protected] showdns_check.o 
.c_check.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 
+0

素晴らしい提案です。問題を修正します。 _checkの代わりに_testプレフィックスを使用してしまいました。 – Wes

-2

私はむしろ無効にしようと思います警告を表示するか、無視してください。 GNU makeは関連するすべてのUnixライクなプラットフォームに存在します。メークファイルの移植性を維持するための時間を費やす実用的な理由はありません。 GNU makeは、他のほとんどの方言と比べて、フィーチャウェイズよりも優れています。

+0

これは当てはまりますが、ホストOSが提供する追加ツールをインストールする必要はありません。 – Wes

+0

しかし、移植可能なメイクファイルの保守に費やす時間を考えてみましょう。 GNU makeのみをターゲットにしている場合、makefileを書くのがずっと簡単になり、アプリケーションの改良やバグの修正に時間がかかります。 – JesperE

+1

GNU Makeをターゲットにしていれば、あなたのMakefileのすべてのGNUMakefileに名前を付けていいですか?みんなの「make」をGNU Makeにして、GNUMakefileを使って標準makeとの互換性を壊そうとする欲求を示さないようにするのは、「移植可能なmakefileを維持する時間を無駄にしないでください。 – MkV

関連する問題