Makeがランダムにファイルを上書きするのを防ぐ方法は?

Makeがランダムにファイルを上書きするのを防ぐ方法は?

私が空のディレクトリにあるとしましょう。all: randomFilename名前が空のファイルのみを含むMakefileを作成すると、GNU randomFilename.shMakeが呼び出されたcat randomFilename.sh >randomFilename; chmod a+x randomFilenameときに実行されます。make

$ echo 'all: randomFilename' > Makefile
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'.  Stop.
$ touch randomFilename.sh
$ make
cat randomFilename.sh >randomFilename 
chmod a+x randomFilename
$ make -v | head -n2
GNU Make 4.0
Built for x86_64-pc-linux-gnu

randomFilenameさらに悪いことに、Makeがすでに存在する場合、名前付きファイルを上書きすることがあります。

$ echo "My content" > randomFilename
$ echo "My content, all gone" > randomFilename.sh
$ make -B
cat randomFilename.sh >randomFilename 
chmod a+x randomFilename
$ cat randomFilename
My content, all gone

私はMakeがこのようなことをする理由と、このような行動を防ぐ方法を探したいと思います。

ベストアンサー1

この動作はMakeの組み込みサフィックスルール(この場合、以前のバージョンのソース管理システム[1])。組み込みサフィックスルールは、空の擬似.SUFFIXESターゲットを指定して無効にできます。2]:

$ echo '.SUFFIXES:'          >  Makefile
$ echo 'all: randomFilename' >> Makefile
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'.  Stop.
$ touch randomFilename.sh
$ make
make: *** No rule to make target 'randomFilename', needed by 'all'.  Stop.

おすすめ記事