Linux多个目录makefile,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文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

【转】Linux makefile 教程 非常详细,且易懂

From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫

Linux makefile 教程 非常详细,且易懂

最近在学习Linux下的C编程,买了一本叫读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

Linux makefile 教程 非常详细,且易懂 &lpar;转)

概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

Linux makefile 教程 非常详细,且易懂(转)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值