文件目录如下:
./child/child.cpp
./child/child.h
./makefile
./parent/parent.cpp
./parent/parent.h
./solution.cpp
./solution.h
文件solution.h
#ifndef __H_SOLUTION_
#define __H_SOLUTION_
#include "iostream"
class Solution{
public:
void say();
};
#endif
文件parent.h
class Parent{
public:
void say();
};
文件parent.cpp
#include "parent.h"
#include "iostream"
using namespace std;
void Parent::say(){
std::cout << "parent say" << std::endl;
}
文件child.h
#include "../solution.h"
class Child{
public:
void say();
};
文件child.cpp
#include "child.h"
#include "iostream"
using namespace std;
void Child::say(){
std::cout << "child say " << std::endl;
}
文件solution.h
#ifndef __H_SOLUTION_
#define __H_SOLUTION_
#include "iostream"
class Solution{
public:
void say();
};
#endif
文件solution.cpp
#include "solution.h"
#include "parent/parent.h"
#include "child/child.h"
int main(){
Parent* p = new Parent();
p->say();
Child* c = new Child();
c->say();
return 0;
}
文件makefile
cc=g++
dst=hel.out
dir=$(shell find . -type d )
header=$(shell find ./ -iname "*.h" )
src=$(shell find ./ -iname "*.cpp" )
objs=$(src:%.cpp=%.o)
$(dst) : $(objs)
$(cc) -o $(dst) $(objs) -I ./
%.o: %.cpp $(header)
$(cc) -c $< -o $@ #其中 $<表示冒号后的依赖文件 *.cpp $@代表生成的冒号
前面的 *.o
clean:
rm -f $(shell find . -iname "*.o" -o -iname "*.exe" -o -iname "*~" -o -iname "*.out")
编译命令:
$ make
g++ -c child/child.cpp -o child/child.o #其中 child/child.cpp表示冒号后的依赖文件 *.cpp child/child.o代表生成的冒号前面的 *.o
g++ -c parent/parent.cpp -o parent/parent.o #其中 parent/parent.cpp表示冒号后的依赖文件 *.cpp parent/parent.o代表生成的冒号前面的 *.o
g++ -c solution.cpp -o solution.o #其中 solution.cpp表示冒号后的依赖文件 *.cpp solution.o代表生成的冒号前面的 *.o
g++ -o hel.out ./child/child.o ./parent/parent.o ./solution.o -I ./
执行编译好的应用程序
$ ./hel.out
parent say
child say