循序渐进写makefile

 memo
 
  • 准备工作

    • main.cpp

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      #include <iostream>
      #include "a.h"

      using namespace std;
      int main()
      {
      test();
      cout << "hello world" << endl;
      return 0;
      }
    • a.h

      1
      2
      3
      4
      5
      #ifndef AH_H
      #define AH_H
      void test();

      #endif
    • a.cpp

      1
      2
      3
      4
      5
      6
      #include <stdio.h>

      void test()
      {
      printf("I am test\n");
      }
  • 版本0
1
2
3
4
start:
g++ -o a.o -c a.cpp
g++ -o main.o -c main.cpp
g++ -o myapp a.o main.o
  • 版本1
1
2
3
4
5
6
7
start:
g++ -o a.o -c a.cpp
g++ -o main.o -c main.cpp
g++ -o myapp a.o main.o

clean:
rm -rf a.o main.o
  • 版本2
1
2
3
4
5
6
7
8
9
10
11
CC=g++

EXEC=myapp

start:
$(CC) -o a.o -c a.cpp
$(CC) -o main.o -c main.cpp
$(CC) -o $(EXEC) a.o main.o

clean:
rm -rf a.o main.o
  • 版本3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CC=g++

SRCS=main.cpp\
a.cpp

OBJS=main.o\
a.o

EXEC=myapp

start:
$(CC) -o $(OBJS) -c $(SRCS)
$(CC) -o $(EXEC) $(OBJS)

clean:
rm -rf $(OBJS)
  • 版本4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CC=g++

SRCS=main.cpp\
a.cpp

OBJS=main.o\
a.o

EXEC=myapp

start: a.o main.o
$(CC) -o $(EXEC) $(OBJS)

a.o main.o:
$(CC) -o $(OBJS) -c $(SRCS)

clean:
rm -rf $(OBJS)
  • 最终版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CC=g++

SRCS=main.cpp\
a.cpp

OBJS=$(SRCS:.cpp=.o)

EXEC=myapp

start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS)

.cpp.o:
$(CC) -o $@ -c $<

clean:
rm -rf $(OBJS)