[解決済み] GNU makeで再帰的ワイルドカード?
2022-11-22 19:42:50
質問
久しぶりに
make
を使うのは久しぶりなので、我慢してください...
ディレクトリを
flac
というディレクトリがあり、.FLAC ファイルが含まれています。対応するディレクトリを
mp3
には MP3 ファイルがあります。FLAC ファイルが対応する MP3 ファイルよりも新しい場合 (または、対応する MP3 ファイルが存在しない場合)、FLAC ファイルを MP3 ファイルに変換し、タグをコピーする一連のコマンドを実行したいのですが、どうすればよいでしょうか?
キッカー: 私は
flac
ディレクトリを再帰的に検索し、対応するサブディレクトリを
mp3
ディレクトリに対応するサブディレクトリを作成します。ディレクトリとファイルの名前にはスペースを含めることができ、UTF-8で命名される。
そして、私が使いたいのは
make
を使って駆動させたい。
どのように解決するのですか?
私なら、次のような方法をとります。
FLAC_FILES = $(shell find flac/ -type f -name '*.flac')
MP3_FILES = $(patsubst flac/%.flac, mp3/%.mp3, $(FLAC_FILES))
.PHONY: all
all: $(MP3_FILES)
mp3/%.mp3: flac/%.flac
@mkdir -p "$(@D)"
@echo convert "$<" to "$@"
いくつかの簡単なメモ
make
の初心者のためのいくつかの簡単なメモです。
-
は
@
は、コマンドの前にあるmake
が実際に実行する前にコマンドを表示することを防ぎます。 -
$(@D)
はターゲットファイル名のディレクトリ部分 ($@
) - シェルコマンドを含む行は、スペースではなく、タブで始まることを確認してください。
これがすべてのUTF-8文字などを処理するとしても、ファイル名やディレクトリ名にスペースがあると、次のように失敗します。
make
はメイクファイル内のものを区切るためにスペースを使用し、私はそれを回避する方法を知らないからです。そのため、シェルスクリプトを使用することになりますが、残念です。
関連
-
[解決済み】コマンドラインからmakeに追加の変数を渡す場合
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み】CMakeをGNU Makeと一緒に使う:正確なコマンドを見るにはどうすればいい?
-
[解決済み】ルール実行時にmake変数を定義する。
-
[解決済み] GNU MakeのCPPFLAGSとCXXFLAGSの違いについて
-
[解決済み] Makefile からプログラムが存在するかどうかをチェックする
-
[解決済み] タブ文字がない有効なMakefileは作れますか?
-
[解決済み] 1つのソースファイルからいくつかのターゲットを生成するGNU Makefileルール
-
[解決済み] mkdir を使っているときに makefile で "directory already exists error" を防ぐには?
-
[解決済み] メイクファイル ifeq 論理的または
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン