:
%.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、あなたは学ぶために多くの概念を持っているようです...
不明な点:次の間の差異:-std = C++ 14 *。その行の最後にコンパイラフラグが何をしていますか?質問を編集して明確にしてください。 – kebs
また、広すぎます。質問ごとに1つの質問を投稿し、自分の努力を実証する - Make変数の意味はよくある質問です。 – tripleee