Linux Makefile多目录的编写
手头一个项目,需要编写项目的makefile
多目录结构:
csource/
├── common
│ └── sqlite3
├── inc
│ ├── curl
│ ├── lua
│ └── Protection
├── lib
│ ├── arm
│ └── linux
├── obj
├── out
│ ├── arm
│ └── linux
├── src
源码目录src,输出目录out,include目录inc,输入链接库目录lib,常用静态函数和sqlite3目录common
makefile如下:
PLAT= none
CC=
CXX=
CFLAGS=
LDFLAGS=
MKDIR_P=mkdir -p PLATS= linux arm root= libroot.so
root_a= libroot.a INC_DIR= ./inc
COM_DIR= ./common
SQL_DIR= ./common/sqlite3
LUA_DIR= ./inc/lua
PRO_DIR= ./inc/Protection
INCLUDE= -I$(LUA_DIR) -I$(INC_DIR) -I$(COM_DIR) -I$(SQL_DIR) -I$(PRO_DIR)
DIR_SRC= ./src SRC = $(wildcard ${DIR_SRC}/*.cpp)
OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) $(DIR_OBJ)/sqlite3.o SO_TARGET = ${DIR_BIN}/${root}
LIB_TARGET= ${DIR_BIN}/${root_a} # Targets start here.
default: $(PLAT) none:
@echo "Please do 'make PLATFORM' where PLATFORM is one of these:"
@echo " $(PLATS)" ${SO_TARGET}:${OBJ}
$(CXX) $(OBJ) -o $@ $(LDFLAGS)
cp ${DIR_BIN}/${root} ./test/ -f ${LIB_TARGET}:${OBJ}
$(AR) $@ ${OBJ}
$(RANLIB) $@ dir:
$(MKDIR_P) $(DIR_OBJ) $(DIR_BIN); all:$(SO_TARGET) $(LIB_TARGET) ALL = dir all linux:
$(MAKE) $(ALL) DIR_OBJ="./obj_linux/" DIR_BIN="./out/linux" \
CC="gcc" CXX="g++" AR="ar rcu" RANLIB="ranlib" \
CFLAGS="-Wno-write-strings -m32 -O2 -D_DEBUG -D_LINUX -fPIC" \
LDFLAGS="-O2 -shared -m32 -ldl -pthread -lrt -L./lib/linux -llua -lProtection -lz -lcurl" arm:
$(MAKE) $(ALL) DIR_OBJ="./obj_arm/" DIR_BIN="./out/arm" \
CC="arm-linux-gnueabihf-gcc" CXX="arm-linux-gnueabihf-g++" \
AR="arm-linux-gnueabihf-ar rcu" RANLIB="arm-linux-gnueabihf-ranlib" \
CFLAGS="-Wno-write-strings -O2 -D_ARM -D__LINUX -fPIC" \
LDFLAGS="-O2 -shared -ldl -pthread -lrt -L./lib/arm -llua -lProtection -lz -lcurl" # list targets that do not create files (but not all makes understand .PHONY)
.PHONY: all $(PLATS) default clean none ${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp
$(CXX) $(CFLAGS) $(INCLUDE) -c $< -o $@ ${DIR_OBJ}/sqlite3.o:${DIR_SRC}/sqlite3.c
$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ .PHONY:clean
clean:
-find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
Linux Makefile多目录的编写的更多相关文章
- [linux]makefile多目录
在使用makefile多目录编写前需要掌握几个函数及符号 自定义变量 target=edit 引用的时候直接使用 $(target) 有点像C语言中的#define,这里的 $(target)会被替换 ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- 【转】Linux makefile 教程 非常详细,且易懂
From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- Linux makefile 教程 非常详细,且易懂 (转)
概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- Linux makefile 教程 非常详细,且易懂(转)
转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...
- Linux驱动之按键驱动编写(中断方式)
在Linux驱动之按键驱动编写(查询方式)已经写了一个查询方式的按键驱动,但是查询方式太占用CPU,接下来利用中断方式编写一个驱动程序,使得CPU占有率降低,在按键空闲时调用read系统调用的进程可以 ...
- Linux驱动之按键驱动编写(查询方式)
在Linux驱动之LED驱动编写已经详细介绍了一个驱动的编写过程,接着来写一个按键驱动程序,主要是在file_operations结构中添加了一个read函数.还是分以下几步说明 1.查看原理图,确定 ...
- Linux Makefile 教程(转)
原文地址:http://blog.csdn.net/liang13664759/article/details/1771246 ------------------------------------ ...
随机推荐
- openresty nginx 安装过程记录
转载请注明原始地址 http://www.cnblogs.com/dongxiao-yang/p/4877799.html 一 :系统版本 1 cat /etc/issue: CentOS relea ...
- Spark GraphX的函数源码分析及应用实例
1. outerJoinVertices函数 首先给出源代码 override def outerJoinVertices[U: ClassTag, VD2: ClassTag] (other: RD ...
- Swift3.0 更新后出现比较运算符方法
在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...
- 【sql进阶】SQL Server 将某一列的值拼接成字符串
今天在统计报表的时候有这么一个需求,将一列字符串拼接成一行,然后展示到新的列中. 每一项的服务列表如下: 最终想要的结果是 sql如下: select AuxTypeName + ',' from ( ...
- 禁止执行某些讨厌的程序,如tadb.exe
第一步:首先通过快捷键"Win+R"来打开"执行"菜单. 第二步:输入"gpedit.msc"回车确认,进入我们电脑中的组策略编辑器. 第三 ...
- HDU 1548 A strange lift 搜索
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- [译]C++如何切分字符串
声明: 翻译仅以技术学习和交流为目的,如需转载请务必标明原帖链接. http://stackoverflow.com/questions/236129/how-to-split-a-string-in ...
- 几种任务调度的 Java 实现方法与比较--转载
前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz ...
- 一段jquery代码,保存
@CHARSET "UTF-8"; #table_id tbody tr.odd td:hover{ background-color:#93CFE5; } #table_id t ...
- ORACLE_DBA管理脚本
SYS @ prod >col index_name for a10 SYS @ prod >col table_name for a10 SYS @ prod >col start ...