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如下:

 1 test = libtest.so
 2 test_a  = libtest.a
 3
 4 LDFLAGS = -O2 -shared -m32 -ldl -pthread -lrt -L./lib/linux -llua -lz -lcurl
 5 CFLAGS = -Wno-write-strings -m32 -O2 -D__LINUX -D_DEBUG -fPIC
 6 CXX     = g++
 7 CC = gcc
 8 AR      = ar rcu
 9 RANLIB  = ranlib
10
11
12 INC_DIR = ./inc
13 COM_DIR = ./common
14 SQL_DIR = ./common/sqlite3
15 LUA_DIR = ./inc/lua
16 PRO_DIR = ./inc/Protection
17 INCLUDE = -I$(LUA_DIR) -I$(INC_DIR) -I$(COM_DIR) -I$(SQL_DIR) -I$(PRO_DIR)
18 DIR_SRC = ./src
19 DIR_OBJ = ./obj
20 DIR_BIN = ./out/linux
21
22 SRC = $(wildcard ${DIR_SRC}/*.cpp)
23 OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) $(DIR_OBJ)/sqlite3.o
24
25 SO_TARGET = ${DIR_BIN}/${test}
26 LIB_TARGET= ${DIR_BIN}/${test_a}
27
28 all:$(SO_TARGET) $(LIB_TARGET)
29
30 ${SO_TARGET}:${OBJ}
31         $(CXX) $(OBJ) -o [email protected] $(LDFLAGS)
32
33 ${LIB_TARGET}:${OBJ}
34         $(AR) [email protected] $(objects)
35         $(RANLIB) [email protected]
36
37 ${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp
38         $(CXX) $(CFLAGS) $(INCLUDE) -c $< -o [email protected]
39
40 ${DIR_OBJ}/sqlite3.o:${DIR_SRC}/sqlite3.c
41         $(CC) $(CFLAGS) $(INCLUDE) -c $< -o [email protected]
42
43 .PHONY:clean
44 clean:
45         -find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
时间: 2024-12-19 19:18:53

Linux Makefile多目录的编写的相关文章

Linux 程序设计学习笔记----动手编写makefile文件

Befroe Beginning. 之前定了暑假的plan ,关于Linux的书籍现在在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 现在开始关于Linux程序设计的第一篇学习笔记. 本来打算把名字写成教程,不过觉得自己完全是新手在自学,还是写学习笔记比较负责和适合. 希望可以一起学习进步. 引入 首先我们假设这样一个场景.我们有一个程序包含了三个文件,分别是源码文件main_plus,c和function_plus.c以及头文件mydefine_p

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

最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解.能让人看懂就是好文章. 跟我一起写 Makefile 陈皓 (CSDN) 概述—— 什么是makefile?或许很多Winodws的程

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

概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就 好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写 makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力. 因为,makefile关系到了 整

linux makefile教程

转自http://blog.csdn.net/liang13664759/article/details/1771246 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了

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

From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解.能让

Linux makefile 教程

转自:http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解.能让人看懂

Linux makefile教程之函数七[转]

使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使用. 一.函数的调用语法 函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $(<function> <arguments> ) 或是 ${<function> <arguments>} 这 里,<function>就是函数名,m

Linux makefile教程之总述二[转]

Makefile 总述——————— 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或多的的目标文件.这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令. 2.隐晦规则.由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的. 3.变量的定义.在Makefile中我们要定义一系列的变量,变

Linux makefile教程之概述一[转]

概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些 Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多 的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力. 因为,makefile关系到了整个工