简单的makefile模板
makefile不是总用到,每次用到的时候总要重新找资料,有点麻烦(怪自己基础知识不扎实,汗)。留一个通用模板放这,方便以后使用
CC = gcc
CXX = g++
LINK = g++
CFLAGS = -g -Wall -O2
TARGET = mk0
SRCS = $(wildcard *.cpp)
SRCS += $(wildcard *.c) CXX_OBJS = $(patsubst %.cpp, %.o, $(wildcard *.cpp))
C_OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) all:$(TARGET) $(TARGET):$(CXX_OBJS) $(C_OBJS)
$(LINK) $(CFLAGS) -o $@ $^
%.o:%.cpp
$(CXX) $(CFLAGS) -c -o $@ $<
%.o:%.c
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY:clean
clean:
rm -rf *.o $(TARGET) $(CXX_OBJS) $(C_OBJS)
因为项目特殊性,经常c与cpp都会用到,所以简单写个这样的makefile文件
上面makefile有很大局限性,比如只能使用与所有源文件在一个目录场景。下面展示可以多个目录下源文件,以及程序使用动态库的特殊场景
CC = gcc
CXX = g++
LINKC = gcc
LINKCXX = g++
CFLAGS = -g -Wall -O2 TOP_DIR := $(shell pwd)
SRC_DIRS := $(shell find $(TOP_DIR) -maxdepth 1 -type d)
TARGET := $(TOP_DIR)/bin/mk0 INC_PATH = -I$(TOP_DIR)/include/
LIB_PATH = -L$(TOP_DIR)/lib/
EXT_LIB = -Wl,-rpath,$(TOP_DIR)/bin/ -lcsay CXX_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp))
CXX_OBJS = $(patsubst %.cpp, %.o, $(CXX_SRCS)) C_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c))
C_OBJS = $(patsubst %.c, %.o, $(C_SRCS)) all:$(TARGET) $(TARGET):$(CXX_OBJS) $(C_OBJS)
$(shell if [ ! -d $(TOP_DIR)/bin ]; then mkdir $(TOP_DIR)/bin; fi)
ifeq ($(CXX_SRCS),)
$(LINKC) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^
else
$(LINKCXX) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^
endif
%.o:%.cpp
$(CXX) $(INC_PATH) $(CFLAGS) -c -o $@ $<
%.o:%.c
$(CC) $(INC_PATH) $(CFLAGS) -c -o $@ $< .PHONY:clean
clean:
rm -rf $(TARGET) $(CXX_OBJS) $(C_OBJS)
如上所示,代码包括了三个目录:. func0 func1目录。用到了一个动态库,因为不想把动态库放入/lib或者/usr/lib下,也不想修改LD_LIBRARY_PATH值。希望能像win下可执行文件跟dll在一起那样,所以使用了 -Wl,-rpath,$(TOP_DIR)/bin/ 指定程序运行时在当前目录下的bin目录找so库。这是一个特殊场景,不需要用到时删除 -Wl,-rpath,$(TOP_DIR)/bin/ 即可。
简单的makefile模板的更多相关文章
- Makefile 一点一滴(一)—— 从最简单的makefile模板写起
我在网上先找了一个最简单的makefile. 建立一个 TestCpp 目录,简单的写几行代码,命名为“TestCpp.cpp”,然后和这个最简单的 makefile 一起扔进去: TestCpp.c ...
- 1、编写一个简单Makefile模板
一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- 【原创】支持同时生成多个main函数 makefile 模板
背景: 去年做项目的时候,由于有需要编译出多个可执行文件的需求,修改了Makefile使其支持生成多个结果(编译多个含有main函数的文件),但总觉得自己的实现不够完美. 今年又遇到这样需求的时候,可 ...
- 简单编写Makefile
相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...
- 我所使用的一个通用的Makefile模板
话不多说,请看: 我的项目有的目录结构有: dirls/ ├── include │ └── apue.h ├── lib │ ├── error.c │ ├── error.o │ ...
- 一个简单的Makefile的编写【用自己的话,解释清楚这些】
用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...
- Hello World 的makefile模板及其分析
makefile模板: ifeq ($(KERNELRELEASE),) //判断KERNELRELEASE是否为空,只有执行make的当前目录为内核源代码目录时,该变量才不为空. KERNELDIR ...
- Csharp 简单操作Word模板文件
原文:Csharp 简单操作Word模板文件 1.创建一个模板的Word文档 Doc1.dot 内容为: To: <Name> Sub:<Subject> Website i ...
- linux学习 建立静态库,动态库,写简单的makefile
建立静态库 建立四个文件 bin(可运行文件),lib(库),include(头文件),src(放源文件) 这里的起的库明为add 在src文件里运行 1)gcc -c add.c //编译add.c ...
随机推荐
- UVA - 11572 Unique Snowflakes 滑动扫描
题目:点击打开题目链接 思路:从左往右扫描,定义扫描左端点L,右端点R,保证每次往几何中添加的都是符合要求的连续的数列中的元素,L和R从0扫到n,复杂度为O(n),使用set维护子数列,set查找删除 ...
- German Collegiate Programming Contest 2018
// Coolest Ski Route #include <iostream> #include <cstdio> #include <cstring> #inc ...
- Hadoop4.2HDFS测试报告之五
第二组:文件存储读过程记录 NameNode:1 DataNode:1 本地存储 scp romotepath localpath 500 2 1 23.05 NameNode:1 DataNode: ...
- HDU 5525 Product 数论
题意: 给出一个长度为\(n(1 \leq n \leq 10^5)\)的序列\(A_i\),\(N=\prod\limits_{i=1}^{n}i^{A_i}\).求\(N\)的所有约数的乘积. 分 ...
- 小甲鱼零基础入门PYTHON
000.愉快的开始 00:17:37 ☆ 001.我和Python的第一次亲密接触 00:13:26 ★ 002.用Python设计第一个游戏 00:24:00 ★ 003.小插曲之变量和字符 ...
- 【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索
题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策 ...
- ICCID
ICCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字+英文组成,其编码格式为:XXX ...
- 基于2.9.6vue-cli初始化webpack工程
前天做了组内的分享 讲了些webpack的东西 整个流程以及build文件夹内webpack相关的一些js所有的代码 每行代码什么意思 有什么作用 都做了很详细的标明. webpack是3.6的 今天 ...
- iOS学习笔记48-Swift(八)反射
一.Swift反射 所谓反射就是可以动态获取类型.成员信息,在运行时可以调用方法.属性等行为的特性. 在使用OC开发时很少强调其反射概念,因为OC的Runtime要比其他语言中的反射强大的多.不过在S ...
- 最里层的是child元素
1. 简介A convenience widget that combines common painting, positioning, and sizing widgets. Container在 ...