私がソースから構築しているウェブサイトは、主に2つのファイルグループで構成されています。まず、ローカライズされたマークアップファイルの作成の一部として、というビルド時にPHP で処理するPHP処理命令を含む一連のHTMLファイル。言い換えれば、ソースディレクトリのHTMLファイルはPHPで処理され、同じ名前のビルドディレクトリにある別のHTMLファイルに出力されます。私のメークファイルは、暗黙的なルールと明示的なルールの間で欲しいものをやっていないのはなぜですか?
上記HTMLファイルの処理には、独自のPHPファイルが含まれています。これらのファイルは、ソースHTMLファイル内のプレースホルダを置き換える実際のローカリゼーションテキストを持ちます。これらのPHPファイルは、対応するXMLファイルから生成されます。これはローカリゼーションテキストの元のキャリアとしてXMLを選択したためです。このプロジェクトは、使用されるテクノロジに関してはむしろ異質なものの大きな部分の一部であるため、XMLを使用して迅速な翻訳を支援しました。
最後に、「静的」資産と呼ばれるファイルの第2のグループがあります。これはソースからビルドディレクトリにそのままコピーするだけです。
私は、依存関係を正しく表現するGNU makeで使用する簡潔なmakefileを書くのに苦労しています。最高で私は半分を達成するmake
私を混乱させる私のトリックを果たしているようだ。
- PHPは
include
がで呼び出されることができ、コードにXML形式からローカリゼーションデータを変換プロセスを:あなたは本当に速いものを拾う場合以下のmakefileの簡単な伝説、あなたがprollyこれをスキップすることができます
xml_to_php_res
。 XMLファイルは現在の(ソース)ディレクトリにあり、*.res.xml
と一致します。 include
にローカライズファイルやプロセスのHTMLファイルをPHPを呼び出すとDESTDIR
は、変数はビルドディレクトリの接頭辞を示すために使用されていることを確認しprocess_html
スクリプトで抽象化されています。接頭辞であるため、定義されるときには通常/
で終わります。明らかな理由から、はのソースディレクトリと一致することはできません。- ソースディレクトリは現在のディレクトリとみなされます
- XMLファイルから生成されたローカリゼーションPHPファイルは、
$(DESTDIR)resources/*.php
と一致します。私は使用後にそれらを破棄しない。なぜなら、1)それらをキャッシュすることは良いことであり、2)実行時に必要と思われる場合に使用できるからである。私はこれらがmake
が "中間"の前提条件と呼んでいると思いますか?
メイク:
php_pp_def_files := $(patsubst ./%.res.xml,$(DESTDIR)resources/%.php,$(shell find -name \*.res.xml))
$(DESTDIR)resources/%.php: %.res.xml
./xml_to_php_res $< > [email protected]
$(DESTDIR)%.html: %.html $(php_pp_def_files) # Each built HTML file depends on corresponding source HTML file and all PHP localization definition files
./process_html $< > [email protected]
$(DESTDIR)%: %
$(INSTALL_DATA) -D $< [email protected]
最後のルールは私の意図を妨害すると表示されます。 make
が設計されているようです - 第2のルールのいくつかの前提条件が存在しない場合、単にそれをスキップして、代わりに第3のルールを考慮します。それは私が必要とするものではありません。
私はall
という目標を省きました。メイクファイルは任意の個々のファイルでは機能しないからです。
私はどのように検索し、ルールにマッチするかについてのいくつかの重要な知識が不足していると思います。私は実際にn回目のマニュアルを実際に十字架にしましたが、それは非常にわかりにくいので、私はそれを習得する前に泣いています:/
うわー、これは有望ですね。ただし、私の統計情報は「* .phpと* .html以外のすべてです」と指定する方法を除きます。私はこれらのパターンを '$(shell find!-name \ *。php!-name \ *。html)'で明示的に除外するか、実際には$(shell find)このルールは他のルールが優先されるときにはうまくいかないことを願っていますか? – amn
@ amn:「すべてのリスト」(個人的には、シェル呼び出しの代わりに組み込み関数 'wildcard'を使用します)を作成し、' filter-out'関数を使って不要なファイルを削除することができます。私はこれを反映するために私の答えを編集します。 – eriktous
十分ですが、自分の「ワイルドカード」を作成した経験がある限り、それはサブディレクトリには降りませんか?私はファイルのフォルダ内にフォルダを持っています。 – amn