使用Makefile进行多文件编译 2023.4.8 2024.11.4 C++ 283 1 分钟使用两个类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.cpp1 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.cpp1 #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 作者:edward链接:http://yedvvard.github.io/posts/c++/使用makefile进行多文件编译/许可:CC BY-NC-SA 4.0