2016-04-16 9 views
-1

私はこの表現に疑問を持っていますか?私はそれが*。oファイルのための定義されたターゲットだと知っていますが、それはどういう意味ですか?%.cpp Makefile$<[email protected]?第二にはない作品を行い

all: 
    $(patsubst %.cpp, %.o, $(wildcard *.cpp)) 

all: $(patsubst %.cpp, %.o, $(wildcard *.cpp)) 

と:

そして:間

何がdiffereneceです。あなたの質問の最初の部分については

+1

不明な点:次の間の差異:-std = C++ 14 *。その行の最後にコンパイラフラグが何をしていますか?質問を編集して明確にしてください。 – kebs

+0

また、広すぎます。質問ごとに1つの質問を投稿し、自分の努力を実証する - Make変数の意味はよくある質問です。 – tripleee

答えて

1

%.out: %.cpp Makefile 
    g++ $< -o [email protected] -std=c++0x 

これはpattern ruleあり、そして意味:(必要な場合)「の.cpp拡張子を持つすべてのファイルに対して、コンパイルコマンドを使用して対応するの.outファイルこの行にg++ $< -o [email protected] -std=c++0x

$<[email protected]が目標(の.outファイル)の名前であり、前提条件(.cppファイル)である。See here

ルールもmakefを追加ile自身を前提条件としています。つまり、make targetコマンドを発行したときに、メイクファイルを変更すると、すべてのファイルが再構築されます(既にコンパイルされていても)。

質問の2番目の部分については、2つのことを混ぜています。

target: dependencies 
     commands 

2つ目のコマンドはコマンドがないため動作できません。この行は、シェルが理解できないファイル名の束を生成します。

最初のものは、名前がすべての.ccpファイルから推測されるすべてのオブジェクトファイルの依存関係のリストに追加されます。しかし、あなたはコマンドが欠落しているので、何も起こらないはず

編集(あなたは私たち全体のルールを与えていない場合を除き?):makeはすべて評価するよう痛い、何かを逃し、このルールは、実際に、正常に動作する必要があります上記のパターンルールを呼び出す。私はあなたを示唆

INFILES = $(wildcard *.cpp) 
OUTFILES = $(patsubst %.cpp, %.o, $(INFILES)) 

:として

OUTFILES = $(patsubst %.cpp, %.o, $(wildcard *.cpp)) 

かさえ:上記のように定義変数と

targetname: $(OUTFILES) 
    @echo "- Done target [email protected]" 

:私は、この構造は、通常はこのように書かれているという事実によって混乱してしまいました良いチュートリアルを見つけるか、read the manual、あなたは学ぶために多くの概念を持っているようです...

関連する問題