私はProject Eulerソリューションディレクトリ用のMakefileを作成しましたが、変更の欠如にかかわらず、いくつかのソリューションを継続的に再コンパイルする際にいくつか問題があります。また、これらの再コンパイル用に作成された*.o
ファイルは、オブジェクトファイル用に指定したディレクトリには作成されません。私のMakefileのMakefileは常に特定のファイルをコンパイルします
一般要旨:
CC = g++-5
CFLAGS = -Wall -c
LFLAGS = -Wall
STD = -std=c++14
all: firsttwenty secondtwenty
firsttwenty: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20
secondtwenty: p21 p22 p23 p24 p25
#
# FIRST TWENTY
#
p1: object_files/problem1.o
$(CC) $(LFLAGS) object_files/problem1.o -o p1 $(STD)
object_files/problem1.o: solutions/problem1.cpp
$(CC) $(CFLAGS) solutions/problem1.cpp $(STD)
p2: object_files/problem2.o
$(CC) $(LFLAGS) object_files/problem2.o -o p2 $(STD)
object_files/problem2.o: solutions/problem2.cpp
$(CC) $(CFLAGS) solutions/problem2.cpp $(STD)
p3: object_files/problem3.o
$(CC) $(LFLAGS) object_files/problem3.o -o p3 $(STD)
object_files/problem3.o: solutions/problem3.cpp
$(CC) $(CFLAGS) solutions/problem3.cpp $(STD)
...
これは、すべてのソリューションのために、このようになります。 私は繰り返しコンソールにmake
を入力すると、私はこの出力を期待する:
make: Nothing to be done for 'all'
は、しかし、私が代わりにこれを毎回取得しています:
g++-5 -Wall -c solutions/problem15.cpp -std=c++14
g++-5 -Wall -c solutions/problem16.cpp -std=c++14
g++-5 -Wall -c solutions/problem20.cpp -std=c++14
g++-5 -Wall -c solutions/problem22.cpp -std=c++14
g++-5 -Wall -c solutions/problem24.cpp -std=c++14
g++-5 -Wall -c solutions/problem25.cpp -std=c++14
代わりにそのオブジェクトファイルを出力したのobject_files/
では、 であり、代わりにmakefileと同じディレクトリに置かれます。
次のように私のディレクトリ設定は次のとおりです。
project_euler
|
|-- downloaded_files
| |
| |-- p022_names.txt
|-- headers
| |
| |-- bigint.h
|-- object_files
| |
| |-- problem1.o
| |-- problem2.o
| |-- ... (other object files)
|-- solutions
| |
| |-- problem1.cpp
| |-- problem2.cpp
| |-- ... (other .cpp files)
|-- Makefile
|-- p1
|-- p2
|-- p3
|-- ... (other binary outputs)
だから私は、私は二つの質問があると思い:
1)なぜこれらのランダムなファイルがで彼らの.oファイルを置く/たびに再コンパイルされていますその根?
2)私は各ソリューションのための時間の後に同じ事の時間を記述する必要はありませんので、私は私のMakefileを圧縮することができ、いくつかの方法はありますか?
これは改造の問題を排除しますが、6個の一見ランダムなオブジェクトファイルは、まだ 'make'が実行されるディレクトリに置かれます。 –
@IanH、おそらく古いファイルであるか、古い形式の特定のオブジェクトファイルのルールがあります。 –
あなたは正しいです。私は彼らが再生されたと仮定しましたが、実際には古いファイルでした。ありがとう!これらの繰り返し線をすべてカップルのルールに統合する方法に関するアイデアはありますか? –