19

私のプロジェクトのディレクトリには、いくつかのサブディレクトリがあります:code/、、、。コードディレクトリからすべてのファイルをコンパイルし、.oファイルをオブジェクトディレクトリに配置するだけです。export/docs/object/make

問題は、すべての.oファイルを無視するようにgitに指示したことです。これは、それらをアップロードしたくないため、オブジェクトディレクトリも追跡しないためです。私は実際にはそれで大丈夫です。GitHubアカウントにもアップロードしたくないのですobject/が、現在のソリューション(ディレクトリ内の単純な空のテキストファイルobject/)では、ディレクトリがアップロードされ、存在する必要がありますビルドの前(makefileはそれがそこにあると想定しているだけです)。

これは実際には最善の解決策とは思えないので、makeファイルにビルドする前にディレクトリが存在しないかどうかを確認し、存在する場合はそれを作成する方法はありますか?これにより、makeコマンドが呼び出されたときにオブジェクトディレクトリが存在せず、後で作成されるようになります。

4

3 に答える 3

28

これを行う唯一の正しい方法は、order-only-prerequisitesを使用することです。https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.htmlを参照してください。|に注意してください スニペットで。

order-only-prerequisitesを使用しない場合、そのディレクトリでの各変更(たとえば、ファイルの対処または作成)により、ディレクトリ作成ターゲットに依存するルールが再度トリガーされます。

object/%.o: code/%.cc | object
    compile $< somehow...

object:
    mkdir -p $@
于 2016-07-22T12:00:10.770 に答える
22

ただそれの目標を持っている:

object/%.o: code/%.cc object
    compile $< somehow...

object:
    mkdir $@

「オブジェクト」と呼ばれるファイルの可能性を防ぐには、もう少し注意する必要がありますが、それが基本的な考え方です。

于 2012-09-26T17:46:14.940 に答える
17

ターゲットにmkdirコマンドを挿入します。

object/%.o : code/%.cc
    @mkdir -p object
    compile $< somehow...

ディレクトリがすでに存在する場合、「-p」はエラーになりません。

于 2015-07-08T16:45:45.940 に答える