回答編集履歴

7

「$(OBJS): $(SRCS)」の部分の意味についての説明を追加した

2020/10/18 06:57

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -58,7 +58,25 @@
58
58
 
59
59
  ```
60
60
 
61
- と展開されてしまいます。
61
+ と展開されて、これは
62
+
63
+ ```
64
+
65
+ obj/main.o: src/main.cpp src/sub.cpp src/sum.cpp
66
+
67
+
68
+
69
+ obj/sub.o: src/main.cpp src/sub.cpp src/sum.cpp
70
+
71
+
72
+
73
+ obj/sum.o: src/main.cpp src/sub.cpp src/sum.cpp
74
+
75
+
76
+
77
+ ```
78
+
79
+ という依存関係を表します。
62
80
 
63
81
 
64
82
 

6

表現修正。

2020/10/18 06:57

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  ```
70
70
 
71
- の「$<」は依存ファイルの先頭を表すのでどれもsrc/main.cppに展開されてしまいます。
71
+ の「$<」は依存ファイルのうちの先頭の1つだけを表すのでどれもsrc/main.cppに展開されてしまいます。
72
72
 
73
73
 
74
74
 

5

コメントを受けて解説を追記した

2020/10/18 06:52

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -39,3 +39,63 @@
39
39
  + rm -f $(TARGET) $(OBJS)
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ #※コメントを受けて追記。
46
+
47
+
48
+
49
+ > $(OBJS): $(SRCS)
50
+
51
+
52
+
53
+
54
+
55
+ ```
56
+
57
+ obj/main.o obj/sub.o obj/sum.o: src/main.cpp src/sub.cpp src/sum.cpp
58
+
59
+ ```
60
+
61
+ と展開されてしまいます。
62
+
63
+
64
+
65
+ ```
66
+
67
+ $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $<
68
+
69
+ ```
70
+
71
+ の「$<」は依存ファイルの先頭を表すのでどれもsrc/main.cppに展開されてしまいます。
72
+
73
+
74
+
75
+ 本来の依存関係は、
76
+
77
+ ```
78
+
79
+ obj/main.o: src/main.cpp
80
+
81
+
82
+
83
+ obj/sub.o: src/sub.cpp
84
+
85
+
86
+
87
+ obj/sum.o: src/sum.cpp
88
+
89
+
90
+
91
+ ```
92
+
93
+ となるべきで、それをワイルドカードで短く書くことが出来るGNU makeの拡張機能で書いたものが、
94
+
95
+ ```
96
+
97
+ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
98
+
99
+ ```
100
+
101
+ です。

4

タイポ修正。

2020/10/18 06:47

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -1,6 +1,6 @@
1
1
  以下の修正でどうでしょうか?
2
2
 
3
- 本題ではありませんがcleanターゲットのところも指定がおかしかったのでそちらも修正しました。
3
+ 本題ではありませんがcleanターゲットのところも指定がおかしかったのでそちらも修正しました。
4
4
 
5
5
 
6
6
 

3

文言ちょっと修正。

2020/10/18 06:32

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -1,6 +1,6 @@
1
1
  以下の修正でどうでしょうか?
2
2
 
3
- 本題ではありませんがcleanターゲットの指定のところも指定ががおかしかったのでそちらも修正しました。
3
+ 本題ではありませんがcleanターゲットのところも指定ががおかしかったのでそちらも修正しました。
4
4
 
5
5
 
6
6
 

2

cleanターゲットで、ファイルを消しきれていない不具合を修正した

2020/10/18 06:31

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -1,4 +1,6 @@
1
1
  以下の修正でどうでしょうか?
2
+
3
+ 本題ではありませんがcleanターゲットの指定のところも指定ががおかしかったのでそちらも修正しました。
2
4
 
3
5
 
4
6
 
@@ -8,9 +10,9 @@
8
10
 
9
11
  --- Makefile.old 2020-10-18 15:20:56.104874495 +0900
10
12
 
11
- +++ Makefile 2020-10-18 15:21:19.132908020 +0900
13
+ +++ Makefile 2020-10-18 15:27:34.629452273 +0900
12
14
 
13
- @@ -15,7 +15,7 @@
15
+ @@ -15,10 +15,10 @@
14
16
 
15
17
  $(TARGET): $(OBJS)
16
18
 
@@ -28,4 +30,12 @@
28
30
 
29
31
  ALL: clean $(TARGET)
30
32
 
33
+
34
+
35
+ clean:
36
+
37
+ - rm -f test ./obj/test.o ./obj/sub.o ./obj/sum.o
38
+
39
+ + rm -f $(TARGET) $(OBJS)
40
+
31
41
  ```

1

文言追加。

2020/10/18 06:30

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -1,3 +1,7 @@
1
+ 以下の修正でどうでしょうか?
2
+
3
+
4
+
1
5
  ```Diff
2
6
 
3
7
  $ diff -u Makefile.old Makefile