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 ------------------------------------ ...
随机推荐
- JSON字符串与JSON对象的区别及转换
JSON对象是直接可以使用JQuery操作的格式,和js中的对象一样,可以用对象(类名)点出属性(方法). JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用 ...
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
本例主要介绍 如何将 pbc 集成到quick-cocos2dx框架中,让我们的cocos2dx客户端Lua拥有编解码Protocol Buffers能力. 参考: 云风pbc的用法: http:// ...
- 用htaccess进行访问控制(转)
1. 文件访问控制 利用 httpd.conf 中的 Order.Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbi ...
- PHP安全编程:防止源代码的暴露(转)
关于包含的一个重要问题是源代码的暴露.产生这个问题主要原因是下面的常见情况: 对包含文件使用.inc的扩展名 包含文件保存在网站主目录下 Apache未设定.inc文件的类型 Apache的默认文件类 ...
- PHP Predefined Interfaces 预定义接口(转)
SPL提供了6个迭代器接口: Traversable 遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口) Iterator 迭代器接口(可在内部迭代自己的外部迭代器或类的接口) Ite ...
- Linux下得到显示屏参数的方法
先安装一个软件,然后使用权ddcprobe可以查看当前支持的分辨率和刷新频率#sudo apt-get install xresprobe运行 #sudo ddcprobe会得到下面的信息vbe: V ...
- Spring 3 + Quartz 1.8.6 Scheduler Example--reference
In this tutorial, we will show you how to integrate Spring with Quartz scheduler framework. Spring c ...
- Scala的一些语言特点
1. 所有的基本数据类型都是对象,比如数值1的所说的类是 scala.Int 2. 所有的运算符都是类成员方法,比如1+2调用1.+(2); 0 to 2 调用 0.to(2) 3. 数组的访问也是通 ...
- 第五章:最后一步准备,1.8的Json模型、状态描述机制详解
<基于1.8 Forge的Minecraft mod制作经验分享> 1.8的所有纹理材质都需要一个Json来对其描述,这一块感觉是各大神的教程里面涉及最少最浅的,我就斗胆在这分享下我研究了 ...
- fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>
转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...