C、C++的Makefile模板
Makefile模板
CC = gcc
LD = $(CC)
TARGET = $(notdir $(CURDIR))
SRC_DIR = .
INCLUDE_DIR += .
C_FLAGS = -g -Wall
LD_FLAFS =
LD_LIBS =
INCLUDES = -I$(INCLUDE_DIR)
ifeq ($(CC), g++)
TYPE = cpp
SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
else
TYPE = c
SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
endif
all : $(TARGET)
@echo "Builded target:" $^
@echo "Done"
$(TARGET) : $(OBJS)
@echo "Linking" $@ "from" $^ "..."
$(LD) -o $@ $^ $(LD_FLAGS) $(LD_LIBS)
@echo "Link finished\n"
$(OBJS) : %.o:%.$(TYPE)
@echo "Compiling" $@ "from" $< "..."
$(CC) -c -o $@ $< $(C_FLAGS) $(INCLUDES)
@echo "Compile finished\n"
.PHONY : clean cleanobj
clean : cleanobj
@echo "Remove all executable files"
rm -f $(TARGET)
cleanobj :
@echo "Remove binary files"
rm -f *.o
用法
编译C程序
make
编译C++程序
make CC=g++
或者将Makefile中的CC = gcc改成CC = g++,然后
make
其他
TARGET指定生成的可执行文件名,我这里用的是当前所在目录名
SRC_DIR指定源文件(.c .cpp)文件的路径
INCLUDE_DIR指定头文件路径
C_FLAGS指定编译参数选项
LD_FLAFS指定链接参数选项
LD_LIBS指定链接库
清除生成的文件:
# 清空全部生成文件
make clean
# 清空生成的中间文件
make cleanobj
Tips
对于Ubuntu系统,可以将Makefile文件复制到/Templates**(中文环境为**/模板)目录下,这样就可以在任意目录下右键添加该Makefile模板。


终端输入:
gedit ~/.bashrc
在~/.bashrc文件中添加一行
alias Makefile="cp ~/Templates/Makefile ./"
保存后输入:
source ~/.bashrc
生效之后,就可以通过在命令行输入Makefile,来创建Makefile模板了。

此文原创禁止转载,转载文章请联系博主并注明来源和出处,谢谢!
作者: Raina_RLN https://www.cnblogs.com/raina/
C、C++的Makefile模板的更多相关文章
- 我所使用的一个通用的Makefile模板
话不多说,请看: 我的项目有的目录结构有: dirls/ ├── include │ └── apue.h ├── lib │ ├── error.c │ ├── error.o │ ...
- Hello World 的makefile模板及其分析
makefile模板: ifeq ($(KERNELRELEASE),) //判断KERNELRELEASE是否为空,只有执行make的当前目录为内核源代码目录时,该变量才不为空. KERNELDIR ...
- 引用 模块编译Makefile模板
本文转载自geyingzhen<模块编译Makefile模板> 引用 geyingzhen 的 模块编译Makefile模板 ifneq ($(KERNELRELEASE), ) // ...
- linux: 几个常用makefile模板
不才,总结个人常用makefile模板,以备后用. 1.编译动态库 ############################################################# # Ma ...
- 【原创】支持同时生成多个main函数 makefile 模板
背景: 去年做项目的时候,由于有需要编译出多个可执行文件的需求,修改了Makefile使其支持生成多个结果(编译多个含有main函数的文件),但总觉得自己的实现不够完美. 今年又遇到这样需求的时候,可 ...
- 1、编写一个简单Makefile模板
一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- g++编译的makefile模板库和脚本
编译C++文件,特别是多文件的时候,经常要找模板,这里为了后面方便,就自己做了一个模板. makefile模板:Makefile # Object files to either reference ...
- makefile编写---.c .cpp 混合编译makefile 模板
# c.cpp混合编译的makefile模板 # # BIN = client_system BASE_INSTALL_DIR := /opt/arm-2009q1 BUILD_TOOL_DIR := ...
- 万能makefile模板
这里一份万能makefile模板,写opencv项目时候使用的. 前提是提前配置好 包管理工具 pkg 然后就不用每次都去 -lopencv_xxx了. ####################### ...
随机推荐
- JSP中的两种跳转方式分别是什么,有什么区别?
forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect("跳转页面地址 ...
- Centos7 C++ 安装使用googletest单元测试
废话不多说,直接开始吧. 环境说明 系统环境:centos7.0 g++ 版本: g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) 查看方法: g++ -vers ...
- 正确应用Java数组
一.数组的特点 数组与其他容器的区别有三方面:效率.类型和保存基本类型的能力. 1.效率.数组是一种效率最高的存储和随机访问对象引用序列的方式.数组是一段连续地址空间内的线性序列,所以访问非常快.但也 ...
- ExpandableListView 可折叠的下拉listview
ExpandableListView用法如下 1.定义布局文件main.xml文件 <?xml version="1.0" encoding="utf-8" ...
- 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1
题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...
- Linux 笔记 - 第二十一章 配置 NFS 服务
一.前言 NFS(Network File System,网络文件系统),主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS 客户端(一般为应用服务器,例如web)可以通 ...
- 阿里云Centos 7安装MongoDB 4.2.0
背景:最近公司项目需要将后台接口优化到100ms内.因此需要对接口逻辑,数据优化做处理, 正好使用到了Redis缓存,mysql,mongoDB的优化,今天记录一下在阿里云centos上安装mongo ...
- Java 截取字符串中指定数据及之后数据
String resCallBackJson="12556{1{{{456858585{"; resCallBackJson = resCallBackJson.su ...
- Vue学习之如何进行调试
调试方法 vue调式方法,浏览器检查元素进入到console 1.console.log() 2.alert('sd') 3.debugger //程序会运行到这里停止 ![](https://img ...
- [Leetcode] 第337题 打家劫舍III
一.题目描述 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为“根”. 除了“根”之外,每栋房子有且只有一个“父“房子与之相连.一番侦察之后,聪 ...