学习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 }

 

posted on 2017-12-07 18:30 BenceTse 阅读() 评论() 编辑 收藏

版权声明:本文为pcxie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/pcxie/p/8000170.html