2016-10-08 10 views
10

私は、サンプルアプリケーションを持つライブラリを使用しています。サンプルメイクファイルは、引数で$<含まれています。私はこれまで見てきた

all:test.cpp 
    g++ -Wl,--no-as-needed -o Example $< 
clean: 
    rm -f SampleApp11 

tutorialspointが言う

$ <そのアクションを起こし、関連ファイルの名前。

websiteと述べている:( の前提条件の名前規則:

が、これはそれが自動変数$ <を使用しています.Cの からの.oのを構築するための接尾辞置換ルールです。 (自動変数については、gnu makeマニュアルのセクションを参照してください) .co: $(CCL)$(インクルード) -c $ < -o $ @

私はまだ混乱していますが、これはどういう意味ですか?

+0

あなたの例では、 'all:' target - 'test.cpp'の後に**最初の**依存関係(ファイル)があります。 – Galik

+0

ああ、 '<$'はg ++にコンパイルするファイルを教えてくれるのですか? –

+12

これはg ++とは関係がないことに注意してください。 g ++を呼び出す前にこれを置き換えるmakeです。 g ++は '$ <'を見ません。もしそうであれば、それをファイル名として扱い、その名前でファイルが見つからないというエラーメッセージを出す可能性があります。 – hvd

答えて

16

これは実際にはコンパイラとは関係なく、Makefile構文の一部であり、コンパイラの実行前に置換されています。

あなたの例では、all:ターゲットの後にの最初のの依存関係(ファイル)です。test.cppです。

Makefileの基本的な機能は、依存変更場合ターゲットを作成することである:通常

target: dependency.cpp 
    rule to create target (using dependency.cpp) 

$<コンパイラに入力[email protected]出力あります。

それがこの(無効Makefile)であったかのようにそれは一種のだ:

[email protected]: $< 
    g++ -o [email protected] $< 

私はそれらを覚えている方法が@では、(ターゲットの練習のように)ターゲットに似ており、<は矢印に似ています。それはGNU make's automatic variablesの一つであるYMMV

@ <-------- (think "Robin Hood") 

9

:だから私はターゲットを指す矢印想像してみてください。

最初の前提条件の名前。ターゲットがレシピを から暗黙ルールに変更した場合、暗黙のルール (Implicit Rules参照)によって追加された最初の前提条件になります。たとえば、以下のルールで最初の前提がtest.cファイルである

targets : prerequisites 
     recipe 

my_executable: test.c precompiled.o 
    g++ -o my_executable $< 

これは以下と等価である

前提条件はruleに記載されているファイルであります:

my_executable: test.c precompiled.o 
    g++ -o my_executable test.c 

precompiled.oが2番目の前提条件です(プリコンパイルされたオブジェクトファイルが暗黙指定されています)。

関連する問題