MakeFile基础知识&多目录编译
来源:互联网 发布:银川善知律师事务所 编辑:程序博客网 时间:2024/06/06 10:56
Makefile的基础知识
http://blog.csdn.net/runninglion/article/details/28111859
======================================================================================================
多目录工程的 makefile 范例
http://blog.sina.com.cn/s/blog_449fafb90100y37u.html
假设要编译的工程是一个主目录proj, 它下面有4个子目录: /main /ui /math /obj
其中
main中包含文件 main.c
ui 中包含了文件 ui.h ui.c
math 中包含了文件 math.h math.c
obj 用于存放最终生成的目标
他们的关系是
main.c include "ui.h" "math.h"
ui.c include "ui.h" "math.h"
math.c include "math.h"
要求是在proj 目中的obj 目录中生成 out(主程序) ui.o main.o
第一种做法是在每一个子目录中都添加一个makefile文件, 当然主目录proj中的makefile必不可少,同时还在主目录中
创建一个env.mk文件,其作用就是包含了其他makefile都用到的模式规则
--------------------- env.mk----------------------------
CC := gcc
LIB_DIR = $(MAKEROOT)/libs
APP_DIR = $(MAKEROOT)/src
TARGET_DIR = $(MAKEROOT)/target
BUILD_DIR = $(MAKEROOT)/build
TARGET_PROG = $(TARGET_DIR)/just_cti_server
#头文件目录
INCLUDE_DIR := \
-I$(MAKEROOT)/ui \
-I$(MAKEROOT)/main \
-I$(MAKEROOT)/math
CFLAGS = \
-fPIC \
-O3 \
$(DEBUG) \
-Wall \
$(INCLUDES)
LDFLAGS = \
-lpthread \
-L/usr/lib64/mysql \
-lmysqlclient \
#对所有的.o文件以.c文件创建它
%.o : %.c
${CC} ${CFLAGS} -c $< -o $(TARGET_DIR)/$@
--------------------------------------------------------
-------------------proj/makefile -----------------------
export MAKEROOT := $(shell pwd)
include ./env.mk
SUBS := $(shell find . -name "Makefile")
SUBDIRS := $(dir $(filter-out ./Makefile, $(shell find . -name "Makefile")))
include $(MAKEROOT)/evn.mk
define build_sub_obj
for dir in $(SUBDIRS); do \
make -C $$dir; \
done
endef
all :
@$(call build_obj) #调用过程
$(CC) $(TARGET_DIR)/*.o $(LDFLAGS) -o $(TARGET_PROG) #生成最终目标
clean :
-rm ./obj/*.o ./out ./obj/*.so
--------------------------------------------------------
------------- ui/makefile & main/makefile ----------------
include $(MAKEROOT)/env.mk #包括头文件,执行模式规则
SRCS := $(wildcard *.c)
OBJS := $(patsubst %.c,%.o,$(SRCS)) #生成所有.c文件对应的.o文件
.PHONY : all
all : $(OBJS)
--------------------------------------------------------
------------------ math/makefile -----------------------
include $(MAKEROOT)/env.mk #包括头文件,执行模式规则
.PHONY : all
all :
gcc -shared -o $(LIB_DIR)/libmath.so math.c math.h #生成动态库文件
--------------------------------------------------------
- MakeFile基础知识&多目录编译
- makefile实现多目录文件编译
- Makefile多目录下编译通用模板
- makefile多级目录编译
- Makefile编译目录下多个文件
- Makefile-----编译目录下多个文件
- makefile之多目录文件编译
- makefile 之多目录,多目标编译
- makefile多级目录的编译
- linux下makefile多目录编译动、静态库
- 多个目录编译的makefile的编写
- 多个目录编译的makefile的编写
- makefile多目录的.c 格式.cpp混合编译
- 编译多个目录源码的Makefile写法
- makefile多目录的.c 格式.cpp混合编译
- makefile多目录的.c 格式.cpp混合编译
- 批量编译目录下文件的Makefile
- 多层目录编译的makefile文件编写
- 贝叶斯分类器Matlab
- 【Scikit-Learn 中文文档】神经网络模型(无监督)- 无监督学习
- Ubuntu16.0.4配置python3.5
- jQ2 强大的选择器
- MATLAB2013在2017年10月份之后就不能激活了
- MakeFile基础知识&多目录编译
- 【SDK接入】使用UnityPlugin接入Bugly(iOS)
- 【Scikit-Learn 中文文档】交叉验证
- 51nod 1803 森林的直径
- Poj2758 Checking the Text
- HOJ P2143 Song(贪心)
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
- 消息机制 钩子+回调
- Java学习课程七:编写程序