私はいくつかの変更を加えてバイナリに適用するまで、この単純なmakefileを書きました。それから、私は「きれいにする」と「作る」ことをやる必要があります。ファイルは再構築されません。これまでの単純な作業のように思えますが、私はobjを作るためにこれを修正しませんでした。ファイルを暗黙的に再構築します(ソースを変更するときには 'make'だけを書くことができます)。このシンプルなメークファイルはなぜ変更時にソースを再構築しないのですか?
COMPILER=g++-5.3
CXXFLAGS=-std=c++11 -O2 -pedantic
build : a.o
$(COMPILER) a.o -o a
a.o:
$(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o
clean :
rm -f *.o *~ a
編集:私はOmadaによって提案された変更を試してみました(私はこの質問を書いた前に、私は同じ自分自身を試してみました)、これが結果です:
[email protected]: ~/mypath$ cat a.cpp
#include <iostream>
int main(int argc, char* argv[])
{
if (argc!=2){
std::ceaaarr<<"Prrogram expects 1 argument\n";
return 1;
}
return 0;
}[email protected]: ~/mypath$ make
g++-5.3 a.o -o a
[email protected]: ~/mypath$ cat Makefile
#init
COMPILER=g++-5.3
CXXFLAGS=-std=c++11 -O2 -pedantic
build: a.o
$(COMPILER) a.o -o a
a.o: a.cpp
$(COMPILER) $(CXXFLAGS) -c a.cpp -o a.o
clean:
rm -f *.o *~ a
'' a.cpp'に依存する必要がありa.o':
はあなたのレシピが実際にあなたが構築しようとしているターゲットの名前を作成することを確認する必要があります。ですから 'a.o:a.cpp'を読むために' a.o: 'の行を変更してください。ターゲット 'build'を' a.o'ではなく 'a'に依存するように変更し、リンクを行うターゲット' a:a.o'を追加します。 – Peter