it-swarm-ja.com

cp-makefileで上書きしない

プロジェクトのメイクファイルで、ファイルが宛先フォルダーにまだ存在しない場合にのみ、構成ファイルをコピーするようにします。私が使用している現在:

cp -n

しかし、最近誰かが「無効なオプション」エラーが発生していると言ってきました。

私の質問は、makefileの場合、これを実現するためのcp -nよりも互換性のある方法はありますか?

(注:cp -uは私が望むものではありません。ファイルがすでに存在する場合は、ソースファイルよりも古い場合でも置き換えないでください。)

3
SlappyTheFish

どうですか:

#!/bin/bash
if ! [ -e /path/to/foo ]
then
    cp foo /path/to/
fi

これが例えばであるならば、さらに良いです。次のような新しい便利なオプションが含まれている可能性のある構成ファイル:

#!/bin/bash
if ! [ -e /path/to/foo ]
then
    cp foo /path/to/
else
    cp -f foo /path/to/foo.new
fi

参照できるコピーがまだあるようにします。

2
Pricey

Makefileからのコマンドはbashになると思いますか?その場合、ファイルが存在するかどうかに応じて条件付きでbashを使用してみてください。

if [ -f $FILE ];
then
   #echo "File $FILE exists"
else
   #echo "File $FILE does not exists"
   cp $SRC_FILE $FILE
fi

ここからのbashコード

内容がbashに対して評価されていない環境でMakefileが実行されていることを発見した場合は、コピー操作に rsync (ほとんどのunixyマシンにインストールする必要があります)を使用できる可能性があります。 。マニュアルページを調べたところ、destが存在しない場合にのみコピーするフラグが表示されませんでしたが、それでもrsyncで対応する必要があると思いますが、使用する目的のフラグを見つける必要があります。

2
James T Snell

Makefileでも同じ問題が発生しました。奇妙な「cp-n」は同じシェルで機能しました。理由を知るのは面白いでしょうか?!

これは私の解決策であり、他の場合よりも少し短くなります

test -e folder/requirements.txt || cp -p ../requirements.txt folder/requirements.txt
1
yvess