私はbashスクリプトを書くのが好きですが、複数のツールを用意すると、プロジェクトのルートディレクトリが多くのシェルスクリプトで埋められます。これがMakefileを使用することを好む理由です。
Makefileは大丈夫です。しかし、私は通常のbashスクリプトのようにmakefileを作成したいと思います。
たとえば、
考えてみると、次のような内容でbashスクリプトをすばやく作成しました。
#!/bin/bash
echo "hello"
cd ~
do-some-work.sh my-parameter
を使用してこのスクリプトを実行できます$ ./my-important-task.sh
。
このスクリプトを makefile に移動するには、次の手順を実行する必要があります。
SHELL := /bin/bash
my-important-task:
echo "hello" ;\
cd ~ ;\
do-some-work.sh my-parameter
しかし、私は以下が欲しい:
my-important-task:
[[copy and paste the my-important-task.sh file]]
これを達成する方法はありますか?
ベストアンサー1
本当に「Makefilesにbashスクリプトを正確に書く」には間接的に行う必要があります。ターゲット行の後にスクリプトを貼り付けるだけで、解決できない2つの問題に直面します。つまり、コマンドラインをタブにインデントし、ドル記号をエスケープする必要があります。
GNU make(BSD make、Solaris makeなどとは逆)を使用している場合は、次のようにスクリプトを変数として定義できます。複数行定義構文、それから使用value
機能拡張をバイパスし、変数の元の値を使用します。
また、skwllspの説明によると、各ターゲットのコマンドリストをGNU makeで1行ずつ実行するのではなく、単一のシェルスクリプトで実行するようにmakeに指示する必要があります。.ONESHELL
目標の定義。
define my_important_task =
# script goes here
endef
my-important-task: ; $(value my_important_task)
.ONESHELL: