2016-12-01 2 views
3

私はオンライン(here)を以下のMakefileを見た:メイクファイルと同じディレクトリにhello.cのファイルがある場合は

hello: 

clean: 
    $(RM) hello 

、ターミナル内makeコマンドはhello実行ファイルを作成します。 make cleanを実行すると、実行可能ファイルhelloは、代わりにrm -f helloによって削除されます。したがって、$(RM) helloはここではrm -f helloを意味します。

  • $(FOO)とはどういう意味ですか?それはMakefileの特殊な構文ですか、何かbashコマンドですか?
  • $(PWD)のように、他のコマンドや$(RM)も実行できますか?
+0

$(で変数を展開することができ10.3 Variables Used by Implicit Rules

:最も一般的な変数のいくつかはで見つけることができます

make -p 

暗黙の変数のリストはで見つけることができます)はmakeの変数展開です。 – 123

答えて

3

これはMakefile変数です。明示的な変数(Makefileの中で定義されています)または暗黙の変数(makeによって定義され、あなたによって上書きされる可能性があります)があります。あなたが$(NAME)または${NAME}

+0

Danhさんに返信してくれてありがとうございました! – Keita

1

これはメイクファイルvariableです。以前は、またはあなたの環境では、シェルに応じて、またはそれがmake自体に入っていれば、RM="rm -f"という構文があり、今は実行しています。

pwdを実行できますが、$(PWD)を使用するには、PWD="pwd"を設定する必要があります。

+0

私の質問に答えるために感謝kabanus!私はここで提供したリンクのドキュメントの変数の章を読み、makeの変数についてもっと学びます。 – Keita

4

$(RM)は、 "make"変数(またはマクロはPOSIX用語集です)への参照です。これらは、同じ意味($(NAME)${NAME})を持つ2つの構文フレーバーになります。デフォルトを持っている

POSIX specifies多くの変数、errrrr、マクロ、:

MAKE=make 
AR=ar 
ARFLAGS=-rv 
YACC=yacc 
YFLAGS= 
LEX=lex 
LFLAGS= 
LDFLAGS= 
CC=c99 
CFLAGS=-O 1 
FC=fort77 
FFLAGS=-O 1 
GET=get 
GFLAGS= 
SCCSFLAGS= 
SCCSGETFLAGS=-s 

興味深いことに、RMはそのうちの一つではありません。 あなたのmake実装の変数RMのデフォルト値は、明らかにrm -fです(デフォルトでは、makeは非POSIXモードで実行されます)。

$(PWD)はシェルコマンド置換と同じ構文(およびシェルパラメータと同じ${PWD})を持っていますが、それらは全く異なるものです。あなたの質問に答えるために、pwdユーティリティを実行するか、現在の作業ディレクトリに展開するための "make"マクロとして$(PWD)を使用することはできません。定義されていないマクロは空の文字列に展開され、眉毛を上げても "make"はありません。

+0

Jensさんにお返事ありがとうございます!非POSIXモードとは何ですか?私のmakeは、私が使用しているmacOS上で動作しているので、他のモードで動作しますか? – Keita

+0

@Keita私が知っている "make"は、デフォルトではPOSIXモードで動作しません。 POSIX以外の機能は常にたくさんあります。 POSIXモードでは、POSIXはメイクファイルの先頭に '.POSIX:'という名前の特別なターゲットが必要だと言っています。 – Jens

関連する問題