我写的万能多用途简洁的Makefile

2024-03-15 00:08

本文主要是介绍我写的万能多用途简洁的Makefile,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我写的万能多用途,简洁的Makefile。希望对你有用。

############################################################### 简洁通用的Makefile文件(Ver 1.1)
## Smart Makefile for general purpose (Ver 1.1)
## Author: 汤 永康 Yongkang TANG <tangyk%at%gmail>
## License: FreeBSD 
## Please use this makefile at YOUR OWN RISK !!!
## Source: https://github.com/tangyk/Smart-Makefile
## 功能: (1)自动搜索编译指定目录下的所有c/c++程序文件
##	  (2)自动搜索并包含(#include)指定目录下的头文件
##	   (3) 可一次性生成多个可执行文件
##	  (4) 设置简单	
##
##  用法:  make   编译所有的应用程序
##          make [step4指定的某程序名]
##          make clean  清除obj文件
#############################################################
CC=g++# Step1.设置第三方头文件的路径以及编辑参数.  比如 CFLAGS= -c -Wall -g -I/any/path/inlude
CFLAGS= -c -Wall -g # Step2.设置库文件以及库文件路径 比如 LIBS = -lGL -lGLU `pkg-config --libs opencv`
LIBS=  -lm# Step3.制定程序的所在路径
# 路径不能以 [/] 符号结尾.  应设置为:  SRC_DIR = . , SRC_DIR = ./test1 
SRC_DIR = .# Step4.需要生成的可执行程序列表 e.g. APP = app1 app2 app3
APP = app#app_EXCL = ./test2/src/test3.cpp ./test2.cxx
# Step5.一个可执行程序只能有一个(main)入口。
# 当有多个应用程序时,需要设置生成各个可执行程序时,需要排除的程序文件列表
# 如果step4中指定的应用程序是server, 在生成server时,需要排除 ./client.c 以及 ./test1.c的话,应做如下设置
#server_EXCL = ./client.c ./test1.c 
# 以此类推。########################### 请不要更改以下内容 ##########
EXTS := *.C *.c *.cxx *.CXX *.cpp *.CPP *.cc *.CC
DIRS := ${shell find ${SRC_DIR} -type d -print}
SRCS := $(foreach dir,$(DIRS),$(wildcard $(addprefix $(dir)/,$(EXTS))))
CFLAGS += $(foreach dir,$(DIRS), $(addprefix -I,$(dir)))
OBJS := $(addsuffix .o, $(SRCS))define CMPL_APP
$(1): $(filter-out $(addsuffix .o,$(value $(1)_EXCL)), $(OBJS))$(CC) -o $(1) $(filter-out $(addsuffix .o, $(value $(addsuffix _EXCL, $(1)))), $(OBJS)) $(LIBS) $(value $(addsuffix _LIBS, $(1)))
endefdefine CMPL_SRC
${1}.o:${CC} $(CFLAGS) ${1} -o ${1}.o
endef.PHONY: all clean
.SUFFIXES:all: $(APP)$(foreach s,$(SRCS),$(eval $(call CMPL_SRC, $(s))))
$(foreach ap,$(APP),$(eval $(call CMPL_APP, $(ap))))clean:rm -f ${OBJS} ${value APP}  



这篇关于我写的万能多用途简洁的Makefile的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/810154

相关文章

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

不同饭局,如何说开场白才能打开氛围?教你一个万能公式

在人情社会中,饭局不仅是吃饱饭的场合,更是人际交往、情感交流的重要平台。无论是家庭聚会、商务宴请、朋友相聚还是同事联谊,一个恰当的开场白都能迅速打破沉默,营造温馨和谐的氛围。 针对现实生活中最常见的四种饭局,酱酒亮哥教你一个万能开场白公式,这个公式分为四步,当然,不是一步不落的照搬,需要灵活应用,挑其中的两步、三步就行了,只要打开氛围,我们的目的也就达到了。接下来我们一起学习一下,希望你在不同的

Emlog模板-简洁大气的资源下载站PHP源码

模板介绍 Emlog模板-简洁大气的资源下载站PHP源码 模板留白简洁大气,首页ajax加载下一页,这是纯模板,安装需要先安装好emlog系统,再把模板文件上传到Emlog模板目录,后台选择模板就可以了,非常简单。 模板下载 Emlog模板-简洁大气的资源下载站PHP源码

hibernate泛型Dao,让持久层简洁起来

【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据库。同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么我们在项目中如何灵活应用hibernate,也会给项目维护以及项目开发带来便利,下面我将展示我们项目中是如何来对hibernate进行应用和操作。 【目录】              -

【深度学习】线性回归的从零开始实现与简洁实现

前言 我原本后面打算用李沐老师那本《动手学深度学习》继续“抄书”,他们团队也免费提供了电子版(https://zh-v2.d2l.ai/d2l-zh-pytorch.pdf)。但书里涉及到代码,一方面展示起来不太方便,另一方面我自己也有很多地方看不太懂。 这让我开始思考起我“抄书”的意义了。如果都是文字,我感觉抄起来可以加深印象,在抄的同时理解并思考。 但是如果涉及到代码,我没办法在抄的时候

Makefile问答之02 预处理器与宏

GCC Makefile中,怎样设定预处理器名称 在 GCC 的 Makefile 中,预处理器(preprocessor)的名称通常是 cpp(C PreProcessor),但在实际的 Makefile 中,我们一般是通过 gcc 命令来调用预处理器,而不是直接调用 cpp。不过,你可以通过设置 CPP 变量来显式指定预处理器名称和选项。以下是如何在 Makefile 中进行设置和使用的

如何在linux下写makefile

Windows下用集成开发环境(IDE)开发程序时不会涉及到编译、链接的步骤,集成开发环境已经把这些工作给你集成好了,你要做的就是根据语言的语法来编写代码。所以Windows下开发程序对makefile会有点生疏。         makefile的作用也是把你编写好之后的源文件进行编译与链接,只是它这个过程需要你自己去指定编译与链接的文件。 makefile的基本格式如下: tar

简洁直白的github快速入门教程(云主机)

如果你不是云主机,也可以使用本地的linux,这里不提供windows的解决方案! 1. 在云主机上安装 Git 首先,确保你的云主机上安装了 Git。你可以使用以下命令来安装它: # 对于 Debian/Ubuntu 系统sudo apt-get updatesudo apt-get install git# 对于 CentOS/RHEL 系统sudo yum install git