web-dev-qa-db-ja.com

makeファイルからbashスクリプトを実行する

ビルドの別の部分を実行するために別の外部bashスクリプトを呼び出したいメイクファイルがあります。これをどうやってやるのがベストだろう。

33
Matthew FL

Makefileから他のコマンドを呼び出すのと同じように:

target: prerequisites
    Shell_script arg1 arg2 arg3

あなたのさらなる説明に関して:

.PHONY: do_script

do_script: 
    Shell_script arg1 arg2 arg3

prerequisites: do_script

target: prerequisites 
36
Carl Norum

メイクファイルルールの各アクションは、サブシェルで実行されるコマンドです。各コマンドは個別のサブシェル内で実行されるため、各コマンドが独立しているを確認する必要があります。

このため、作成者が複数のコマンドを同じサブシェルで実行する場合、改行がエスケープされることがよくあります。

targetfoo:
        command_the_first foo bar baz
        command_the_second wibble wobble warble
        command_the_third which is rather too long \
            to fit on a single line so \
            intervening line breaks are escaped
        command_the_fourth spam eggs beans
8
bignose

おそらく既に提供されている答えのようにそれを行う「正しい」方法ではありませんが、ソフトウェアのパッケージ全体のバージョンを提供するヘッダーファイルを生成するために作成したスクリプトをメイクファイルで実行したいため、この質問に出会いました。このパッケージにはかなりの数のターゲットがあり、それらすべてに新しい前提条件を追加したくありませんでした。これをメイクファイルの先頭に置くとうまくいきました

$(Shell ./genVer.sh)

これは、単にシェルコマンドを実行するようにmakeに指示します。 ./genVer.shは、実行するスクリプトのパス(makefileと同じディレクトリ)と名前です。これは、私がどのターゲットを指定しても実行されます(マイナス面であるcleanを含みますが、最終的には大したことではありません)。

5
yano