IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> makefile -> 正文阅读

[C++知识库]makefile


 
SRCDIRS	:=. src
			
INCDIRS :=.
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
CPLUSPLUSFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.cpp))
SFILES :=$(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
#----------------------------------------------------------
#编译工具用g++,以同时支持C和C++程序,以及二者的混合编译
CC=g++
lib=-lpthread -lrt  
CPPFLAGS = -Wall -std=c++11
CDEFINE =-DHELLO
TARGET = eventfd_test
OBJ_FOLDER=obj
INCLUDE			:= $(patsubst %, -I%, $(INCDIRS))
VPATH			:= $(SRCDIRS)
#使用$(winldcard *.c)来获取工作目录下的所有.c文件的列表
#sources:=main.cpp command.c
 
#变量sources得到当前目录下待编译的.c/.cpp文件的列表,两次调用winldcard、结果连在一起即可
sources:=$(CFILES) $(CPLUSPLUSFILES)  #$(wildcard *.c) $(wildcard *.cpp)
 
#变量objects得到待生成的.o文件的列表,把sources中每个文件的扩展名换成.o即可。这里两次调用patsubst函数,第1次把sources中所有.cpp换成.o,第2次把第1次结果里所有.c换成.o
objects:=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(sources)))
#变量dependence得到待生成的.d文件的列表,把objects中每个扩展名.o换成.d即可。也可写成$(patsubst %.o,%.d,$(objects))
dependence:=$(objects:.o=.d)
 
#----------------------------------------------------------
#当$(objects)列表里所有文件都生成后,便可调用这里的 $(CC) $^ -o $@ 命令生成最终目标all了
#把all定义成第1个规则,使得可以把make all命令简写成make
all: $(objects)
	$(CC) $(CPPFLAGS) $^ -o $(TARGET) $(lib)
	#@./$@	#编译后立即执行
 
#这段使用make的模式规则,指示如何由.c文件生成.o,即对每个.c文件,调用gcc -c XX.c -o XX.o命令生成对应的.o文件
#如果不写这段也可以,因为make的隐含规则可以起到同样的效果
%.o: %.c
	$(CC) $(CPPFLAGS) $(INCLUDE) -c $< -o $@
#同上,指示如何由.cpp生成.o,可省略
%.o: %.cpp
	$(CC) $(CPPFLAGS) $(INCLUDE) -c $< -o $@
#----------------------------------------------------------
include $(dependence)	#注意该句要放在终极目标all的规则之后,否则.d文件里的规则会被误当作终极规则了
#因为这4行命令要多次凋用,定义成命令包以简化书写
define gen_dep
set -e; rm -f $@; \
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
endef
 
#指示如何由.c生成其依赖规则文件.d
#这段使用make的模式规则,指示对每个.c文件,如何生成其依赖规则文件.d,调用上面的命令包即可
%.d: %.c
	$(gen_dep)
 
#同上,指示对每个.cpp,如何生成其依赖规则文件.d
%.d: %.cpp
	$(gen_dep)
 
#----------------------------------------------------------
#清除所有临时文件(所有.o和.d)。之所以把clean定义成伪目标,是因为这个目标并不对应实际的文件
.PHONY: clean 
clean:	#.$$已在每次使用后立即删除。-f参数表示被删文件不存在时不报错
	rm -f $(TARGET) $(objects) $(dependence)

echo:	#调试时显示一些变量的值
	@echo sources=$(sources)
	@echo objects=$(objects)
	@echo dependence=$(dependence)
	@echo CPPFLAGS=$(CPPFLAGS)
 
#提醒:当混合编译.c/.cpp时,为了能够在C++程序里调用C函数,必须把每一个要调用的C函数,其声明都包括在extern "C"{}块里面,这样C++链接时才能成功链接它们。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:09:20  更:2022-04-27 11:10:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 23:26:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码