2017-11-28 19 views
1

私はルールを作り、次のしている:のMakefile、前提条件で代替パス自動変数

$ ls files 
a b c 
$ cat Makefile 
files.7z: ./files/* 
7z a [email protected] $? 

を次のようにルールが実行されます。特にその中で./で始まる

7z a files.7z files/a files/b files/c

7zの扱いパス、パスのないアーカイブにファイルを含めます。最初にパスを交換する最短の方法は、の$?にありますか?

答えて

1

Makefileはスペースを全くうまく扱​​いません(hereを参照)。最も簡単な方法は、スペースがある場合、makeが失敗することですし、それは簡単です:

check: 
    @ ls ./files/* | grep -q " "; \ 
     if [ $$? -ne 1 ]; then \ 
     echo "WE DO NOT SUPPORT FILENAMES WITH SPACES"; \ 
     exit 1; \ 
     fi 

files.7z: ./files/* | check 
    7z a [email protected] $(addprefix ./,$^) 

注:スペースを含むファイル名のウェブ上の回避策があるが、彼らは非常に保守ではない、過度に複雑だと費用がかかりますあなたの顧客/同僚に「スペースでファイル名をサポートしていません」と言っているよりも多くの頭痛があります。

関連する問題