学习makefile的一个工程示例
来源:互联网 发布:软件平台下载 编辑:程序博客网 时间:2024/05/20 03:38
http://www.cnblogs.com/pcxie/p/8000170.html
前言
makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我
正文
基础知识
g++ [-I文件夹1:文件夹2] 文件a
表示的是在编译文件a时,其头文件除了系统默认的位置,还要查询文件夹1和文件夹2下有没有对应的文件
makefile中的基本文法为以下加粗部分:
目标1 目标2 目标3... : 依赖1 依赖2 依赖3...
命令1
命令2
命令3...
其中
$^代表所有的依赖对象
$<代表第一个依赖对象
$@ 代表所有目标
工程目录结构
---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完成一个类,main函数中创建student类,其中main.cc和student.cc头文件包含了student.h
主makefile(主makefile,调用子makefile进行项目构建)
1 CC = g++ #因为是C++代码,定义编译方式为g++ 2 TOP_DIR := ${PWD} #定义当前makefile文件位置 3 SUB_DIR := src obj #工程中含有makefile,需要进行make的文件夹 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 #将以上变量导出为全局变量,这样在子makefile也能能够直接使用12 13 all: CHECKDIR $(SUB_DIR) #当执行make命令时,首先要执行all这段,其依赖于CHECKDIR和${SUB_DIR}的构建14 CHECKDIR: 15 mkdir -p $(SUB_DIR) $(BIN_DIR) #构建执行中所需要的文件夹,包括src obj(已经存在),和bin16 $(SUB_DIR):ECHO #依赖ECHO,以及编译所有的源码,生成${SUB_DIR}的中间文件,这里等价与执行了make -C ./src ./obj 17 make -C $@18 ECHO:19 @echo $(SUB_DIR) #打印正在makefile的位置20 @echo bengin compile #打印开始进行该部分的编译21 clean: #删除obj文件夹下的所有的.o文件以及bin文件夹下的所有文件22 -rm -rf $(OBJ_DIR)/*.o $(BIN_DIR)
src下的makefile(子makefile,将.cc编译为.o)
1 #vpath %.h ${INCLUDE} #已经被注释掉了,因为主makefile已经传递了VPATH的变量2 #vpath %.cc ${SRC} 3 all : $(OBJ_DIR)/main.o $(OBJ_DIR)/student.o #分别编译main.cc和student.cc4 $(OBJ_DIR)/main.o : main.cc student.h5 $(CC) -c $< -I${INCLUDE} -o $@6 $(OBJ_DIR)/student.o : student.cc student.h7 $(CC) -c $< -I${INCLUDE} -o $@
obj下的makefile(子makefile,将.o链接为可执行文件)
1 #BIN_DIR := ../bin2 #BIN := hello3 #OBJ := main.o student.o4 #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 }
make后的工程目录为
---include(放置头文件.h)
------student.h(Student类的头文件)
---src(放置源文件.cc)
------student.cc(Student类的定义文件)
------main.cc(main文件)
------makefile(子makefile,将.cc编译为.o)
---obj(放置编译临时文件.o)
------student.o
------main.o
------makefile(子makefile,将.o链接为可执行文件)
---bin(放置生成的可执行文件)
------hello(可执行文件)
---makefile(主makefile,调用子makefile进行项目构建)
- 学习makefile的一个工程示例
- 学习makefile的一个工程示例
- 一个不错的 MAKEFILE示例
- 一个简单的makefile示例
- 一个简单的Makefile示例
- 一个简单的Makefile示例
- 一个简单的Makefile示例
- 一个简单的MAKEFILE示例
- 多目录工程的makefile示例
- makefile深度学习(一个工程实例来学习 Makefile)
- 一个工程实例来学习 Makefile
- 一个工程实例来学习 Makefile
- 一个工程实例来学习 Makefile
- 一个还不成熟的makefile工程
- 一个简单的makefile示例及其注释
- 一个简单的makefile示例及其注释
- 一个简单的makefile示例及其注释
- 一个简单的makefile示例及其注释
- NAND的局限性和使用寿命
- 成绩排序
- 坚持#第235天~哎呀,最近培训云计算忙得都把写博客的大事给忘了,赶快捡起来
- python 界面二
- 聪明的木匠(51nod 1117)
- 学习makefile的一个工程示例
- 2017.12.07日记
- 基于51单片机超声波测距的学习
- 信息安全实践-Lab1 HTTPS
- centos 安装logstash 5.0
- 判断一个数据序列是否构成一个小根堆
- 登陆界面
- C语言学习之被吞掉的数组大小
- 关于多线程中使用SendMessage