layout: post
title:
category : linux系统
tags : [Makefile]

许久以前,一直使用自己总结的Makefile模板,这个模板也是基于现有资料整理而成的。

内容

Makefile完全内容如下:

# !!!=== cross compile...
CROSS_COMPILE ?= CC  = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
AR  = $(CROSS_COMPILE)arARFLAGS = -cr
RM     = -rm -rf
MAKE   = makeCFLAGS  =
LDFLAGS =
DEFS    =
LIBS    =# !!!===
# target executable file or .a or .so
target = a.out# !!!===
# compile flags
CFLAGS += -Wall -Wfatal-errors#****************************************************************************
# debug can be set to y to include debugging info, or n otherwise
debug  = y#****************************************************************************ifeq ($(debug), y)CFLAGS += -ggdb -rdynamic
elseCFLAGS += -O2 -s
endif# !!!===
DEFS    += -DFUCKCFLAGS  += $(DEFS)LIBS    += LDFLAGS += $(LIBS)# !!!===
INC1 = ./
INC2 = ./inc
INC3 =
INCDIRS := -I$(INC1) -I$(INC2)# !!!===
CFLAGS += $(INCDIRS)# !!!===
LDFLAGS += -lpthread -lrtDYNC_FLAGS += -fpic -shared# !!!===
# source file(s), including c file(s) or cpp file(s)
# you can also use $(wildcard *.c), etc.
SRC_DIR = .
SRC_DIR1 =
SRC_DIR2 =
SRC_DIR3 = # ok for c/c++
SRC = $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*.cpp)
SRC+=$(wildcard $(SRC_DIR1)/*.c $(SRC_DIR1)/*.cpp)
SRC+=$(wildcard $(SRC_DIR2)/*.c $(SRC_DIR2)/*.cpp)
SRC+=$(wildcard $(SRC_DIR3)/*.c $(SRC_DIR3)/*.cpp)# ok for c/c++
OBJ = $(patsubst %.c,%.o, $(patsubst %.cpp,%.o, $(SRC))) # !!!===
# in case all .c/.cpp need g++...
# CC = $(CXX)ifeq ($(V),1)
Q=
NQ=true
else
Q=
NQ=echo
endif###############################################################################all: $(target)$(target): $(OBJ)ifeq ($(suffix $(target)), .so)@$(NQ) "Generating dynamic lib file..." $(notdir $(target))$(Q)$(CXX) $(CFLAGS) $^ -o $(target) $(LDFLAGS) $(DYNC_FLAGS)
else ifeq ($(suffix $(target)), .a)@$(NQ) "Generating static lib file..." $(notdir $(target))$(Q)$(AR) $(ARFLAGS) -o $(target) $^
else@$(NQ) "Generating executable file..." $(notdir $(target))$(Q)$(CXX) $(CFLAGS) $^ -o $(target) $(LDFLAGS)
endif# make all .c or .cpp
%.o: %.c@$(NQ) "Compiling: " $(addsuffix .c, $(basename $(notdir $@)))$(Q)$(CC) $(CFLAGS) -c $< -o $@%.o: %.cpp@$(NQ) "Compiling: " $(addsuffix .cpp, $(basename $(notdir $@)))$(Q)$(CXX) $(CFLAGS) -c $< -o $@clean:@$(NQ) "Cleaning..."$(Q)$(RM) $(target)@find . -iname '*.o' -o -iname '*.bak' -o -iname '*.d' | xargs rm -f.PHONY: all clean

使用

这个Makefile适用于一个目录或只有几个目录的情况,支持生成可执行程序、静态库、动态库。只需少许修改即可使用,如果是只有一个目录,无需任何修改,将其放到目录下,直接输入make即可编译生成a.out。所有要修改的地方均使用!!!===来注明。

要注意,Makefile使用的是Tab键,如果不是的话,会提示错误,如:Makefile:81: *** missing separator. Stop.

小结

曾经想过构建一套完整的脚本系统,用于大型复杂的软件项目,但是,几经尝试,都不如意,就放弃了,选择从最简单的入手。然后根据实际项目,稍作修改即可应用。

李迟 2018.7.1

一个使用多年的Makefile模板相关推荐

  1. 复杂多目录的Makefile模板及示例

    大约一年多以前,还在移植u-boot,当时参考了u-boot的Makefile,做了一个多目录的Makefile模板.如今,一年过去了,本篇文章还是折腾Makefile模板,本人的水平由此可见一斑.当 ...

  2. 复杂多目录的Makefile模板及示例-转

    大约一年多以前,还在移植u-boot,当时参考了u-boot的Makefile,做了一个多目录的Makefile模板.如今,一年过去了,本篇文章还是折腾Makefile模板,本人的水平由此可见一斑.当 ...

  3. 一个适用各类场合的Makefile模板

    1.写在前面 对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了"一键编译",编码完成后只需一个操作即可完成编译.链接.生成目标文件.Linu ...

  4. 一个STM32编译Makefile模板

    最近突然对STM32感兴趣,研究了一下.STM32的编译方式非常多,由于一直对gcc情有独钟,所以还是喜欢使用Makefile+gcc编译的方法.当时从51单片机转向AVR单片机开发时,也是通过这种方 ...

  5. Makefile模板的继续改进

    layout: post title: category : linux系统 tags : [Makefile] 上一文章的Makefile,存在一个比较大的问题,那就是生成可执行的二进制文件时,会链 ...

  6. GNU/Linux智能Makefile模板(多目录,多文件)

    本文提供一个在GNU/Linux环境下通用的智能Makefile模板,用户可以将其引入到自己的工程当中.即使用户对此 Makefile的工作原理不甚了解,但是只需要修改少数几个关键变量,就可以满足不同 ...

  7. 万能 Makefile 模板

    在 Linux 编程时,对于很多小工程来说,很多时候似乎没有必要用 autoconf 和 automake 工具来生成 Makefile,反而自己写一个 Makefile 更省事.这里给大家提供一个简 ...

  8. LINUX驱动Makefile模板

    网上有好多关于驱动的Makefile怎么写,驱动程序怎么运行,为什么驱动会没有main等等问题的问题的问题.下面我也给出我的驱动Makefile模板,这些东东都是在书籍和人家的研究成果上改进而来的,至 ...

  9. 关于中型工程的Makefile模板

    我们定义的中型工程 可能会有多层嵌套的源代码文件夹 一个源代码文件夹下可能有多个源代码子文件夹 中间文件应当在其源文件所在目录生成,而不是同一生成到一个目录下(如统一生成到obj目录下) (大多数情况 ...

最新文章

  1. 国家卫健委:我国男女性成人平均身高分别为169.7厘米和158厘米
  2. 自然语言处理在开放搜索中的应用
  3. 安卓系统手机软件_2M不到的安卓神器!有了这五款软件,iphone用户都羡慕
  4. Android之ActivityManager与Proxy模式的运用
  5. java向指定文件继续写内容_java 向指定文件写入内容(如文件存在,则先删除再创建;写入如目录不存在,则创建)...
  6. java拆装_JAVA线性表拆解
  7. [Golang]计算一个文件的MD5值
  8. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
  9. 子窗体中组合框联动_一张表实现组合框联动
  10. 程序开源与不开源区别_如何在公司中启动开源程序
  11. 重启服务器后网页显示nginx,解决重启服务器以后Nginx无法启动
  12. 三星emcp型号详解_三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?......
  13. 市场调查有什么好的选题推荐么?
  14. [计算机网络]网络层
  15. R语言回归分析-改进异常值
  16. 当下非常火的VR全景展示到底是什么?
  17. 电池极耳尺寸视觉检测系统
  18. 如何做一个炫酷的动画网站-css实现图片上下浮动效果
  19. js 递归算法将扁平数据处理成树状数据
  20. stm32+drv8825驱动42步进电机

热门文章

  1. 铜陵高考2021年成绩查询,滁州高考成绩查询入口2021
  2. 学习web标准、用户体验改善、Ajaxamp;Asp.Net
  3. vivo X Fold或首发国产最强屏幕:120Hz LTPO 3.0
  4. 刷抖音18.5G、看视频22.5G,国美通报员工上班摸鱼:回应来了
  5. 《哈里波特:魔法觉醒》被指侮辱女性玩家?官方回应:动画BUG
  6. iPhone 12 mini大幅砍单 苹果可能又要因为屏幕而向三星支付违约金
  7. 上海新阳半导体收到ASML-1400光刻机 将用于研发193nm ArF光刻胶
  8. 苹果新隐私政策在iOS14.4测试版上线:能允许或拒绝“跟踪”
  9. 罗永浩回应被限制高消费:已跟债权方达成和解
  10. 一代人的记忆!又一波微信表情默默消失了