Makefileにbashスクリプトを正確に書くには?

Makefileにbashスクリプトを正確に書くには?

私は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:

おすすめ記事