学习makefile的一个工程示例
学习makefile的一个工程示例
前言
makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我
正文
工程目录结构
—include(放置头文件.h)
——student.h(Student类的头文件)
—src(放置源文件.cc)
——student.cc(Student类的定义文件)
——main.cc(main文件)
——makefile(子makefile,将.cc编译为.o)
—obj(放置编译临时文件.o)
——makefile(子makefile,将.o链接为可执行文件)
—bin(放置生成的可执行文件)
—makefile(主makefile,调用子makefile进行项目构建)
文件介绍
student.h和student.cc完成一个类
主makefile(主makefile,调用子makefile进行项目构建)
1 CC = g++ 2 TOP_DIR := ${PWD} 3 SUB_DIR := src obj 4 BIN := hello 5 BIN_DIR := ${TOP_DIR}/bin 6 OBJ = main.o student.o 7 OBJ_DIR := $(TOP_DIR)/obj 8 INCLUDE := ${TOP_DIR}/include 9 SRC := ${TOP_DIR}/src 10 VPATH := ${INCLUDE}:${SRC} 11 export CC :TOP_DIR OBJ OBJ_DIR BIN_DIR BIN INCLUDE SRC VPATH 12 13 all: CHECKDIR $(SUB_DIR) 14 CHECKDIR: 15 mkdir -p $(SUB_DIR) $(BIN_DIR) 16 $(SUB_DIR):ECHO 17 make -C $@ 18 ECHO: 19 @echo $(SUB_DIR) 20 @echo bengin compile 21 clean: 22 -rm -rf $(OBJ_DIR)/*.o $(BIN_DIR)
src下的makefile(子makefile,将.cc编译为.o)
1 #vpath %.h ${INCLUDE} 2 #vpath %.cc ${SRC} 3 all : $(OBJ_DIR)/main.o $(OBJ_DIR)/student.o 4 $(OBJ_DIR)/main.o : main.cc student.h 5 $(CC) -c $< -I${INCLUDE} -o $@ 6 $(OBJ_DIR)/student.o : student.cc student.h 7 $(CC) -c $< -I${INCLUDE} -o $@
obj下的makefile(子makefile,将.o链接为可执行文件)
1 #BIN_DIR := ../bin 2 #BIN := hello 3 #OBJ := main.o student.o 4 #CC = g++ 5 $(BIN_DIR)/$(BIN):$(OBJ) 6 $(CC) $^ -o $@
student.h
1 #ifndef _STUDENT 2 #define _STUDENT 3 #include <string> 4 class Student 5 { 6 public: 7 Student(int id,std::string name); 8 std::string getName(); 9 private: 10 int id; 11 std::string name; 12 }; 13 #endif
student.cc
1 #include "student.h" 2 Student::Student(int id,std::string name):id(id),name(name){ 3 4 } 5 std::string Student::getName() 6 { 7 return name; 8 }
main.cc
1 #include "student.h" 2 Student::Student(int id,std::string name):id(id),name(name){ 3 4 } 5 std::string Student::getName() 6 { 7 return name; 8 }