Makefileでcatを使ってファイルをマージする方法は?

Makefileでcatを使ってファイルをマージする方法は?

まず、ここがこういう質問をするのが正しいか全く分かりませんが…

私は現在のディレクトリで作業しており、ディレクトリファイルのすべての内容を含むファイルを作成しようとしています。要件は、Makefileのルールを使用してこれを行う必要があることです。現在、私のmakefileの先頭にはファイルのリストがあり、次に別のルールがあり、次に悲しいルールを試みます。私が経験している問題は、「yにターゲットxが必要であるというルールがありません」というメッセージが表示され続けることです。私の考えにはレシピや前提条件に問題があるようです。だから:

FILES= file1 file2 file3 file4 file5...

directory_name/all.txt: **HERE IS THE PART IDK ABOUT**
   cat $^ > $@

私はmakeコマンドと一般的なコーディングについて非常に慣れていないので、おそらく愚かな質問かもしれませんが、オンラインの他の場所ではまだ満足のいく答えを見つけることができません。私はそのディレクトリ(directory_name / %.txtなど)でファイルを参照するか、ファイルを前提条件として一覧表示しようとしましたが、何も機能しません。

答え1

あなたのルールは次のとおりです

directory_name/all.txt: $(FILES)
        cat $(FILES) > $@

これは、ルールがGNUmakeとBSDに対して機能するように最大の移植性を提供しますmake(理解できない可能性があり、$^どの実装が使用されているかはわかりませんでした)。コマンドを含む行はcatタブを使用してインデントする必要があります。

答え2

依存関係のリストは$(FILES)です。

デフォルトでは、これは指定されたリストを拡張します。したがって、有効性に寄与するファイルがターゲット自体よりも最新の場合、ターゲットは再生成されます。

パターンがある場合、ファイルにワイルドカードを使用する略語があります。たとえば、次のようになります。

FILES= file[1-9]

関連情報