使用Makefile进行多文件编译

使用两个类class1和class2,在demo中利用class1访问class2的私有属性(基于friend)

class1.h

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#ifndef ININIIN
#define ININIIN
#include "class2.h"


class class1{
public:
    void print_class2(class2& cl2);
};

#endif

class2.h

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#ifndef ININIIN2
#define ININIIN2

class class2{
    friend class class1;//let class1 be friend of class2
public:
    class2(int b = 10):b_(b){};
private:
    int b_;
};

#endif
};

#endif

class1.cpp

1
2
3
4
5
6
7
8
9
#include "class1.h"
#include "class2.h"
#include<iostream>
using std::cout;
using std::endl;

void class1::print_class2(class2& cl2){
    cout << cl2.b_ << endl;
};

class2.cpp

1
#include "class2.h"

demo.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include<iostream>
#include "class1.h"
#include "class2.h"
using std::cout;
using std::endl;


int main(){
    class1 cl1;
    class2 cl2;
    cl1.print_class2(cl2);
    return 0;
}

Makefile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
CC = g++ -std=c++11
CFLAGS = -g -Wall

demo: class1.o class2.o
	$(CC) $(CFLAGS) -o demo demo.cpp class1.o class2.o

class1.o: class1.h
	$(CC) $(CFLAGS) -c class1.cpp

class2.o: class2.h
	$(CC) $(CFLAGS) -c class2.cpp

clean:
	rm -rf demo *.o

make

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ make clean
rm -rf demo *.o

$ make      
g++ -std=c++11 -g -Wall -c class1.cpp
g++ -std=c++11 -g -Wall -c class2.cpp
g++ -std=c++11 -g -Wall -o demo demo.cpp class1.o class2.o

$ ./demo
10