[置顶] makefile自动化编译学习

时间:2022-04-25 12:50:36


    makefile文件描述源程序之间的相互关系,例如依赖,并自动维护编译工作。makefile 类似于shell脚本按照某种语法进行编写,文件说明如何各个源文件是如何被编译并且连接生成最后的可执行文件,好处就是自动化编译,极好地提高了软件开发的效率,应用非常广泛,以下代码是一些稍微简单的模板,不过已经在很多小项目里够用了:

 
################OPTION###################
CCOMPILE = gcc                      
CPPCOMPILE = g++
COMPILEOPTION = -c
INCLUDEDIR = -I${ORACLE_HOME}/rdbms/public -I${ORACLE_HOME}/precomp/public 
LINK = gcc
LINKOPTION = -o Process
LIBDIRS = -L$(ORACLE_HOME)/lib
OBJS = Process.o Database.o Main.o Func.o
OUTPUT = Process
SHAREDLIB = -lclntsh
APPENDLIB =
PROC_OPTION = DEFINE=_PROC_ MODE=ORACLE
ESQL_OPTION =
################OPTION END################
ESQL = esql
PROC = proc
$(OUTPUT):$(OBJS) $(APPENDLIB)
 $(LINK) $(LINKOPTION) $(LIBDIRS)   $(OBJS) $(SHAREDLIB) $(APPENDLIB)

clean:
 rm -f $(OBJS)
 rm -f $(OUTPUT)
all: clean $(OUTPUT)
.PRECIOUS:%.cpp %.c %.C
.SUFFIXES:
.SUFFIXES:  .c .o  .pc .ec .cc


.c.o:
 $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.c
 
.cc.o:
 $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR)  $*.cpp

.ec.c:
 $(ESQL) -e $(ESQL_OPTION) $(INCLUDEDIR) $*.ec

.pc.c:
 $(PROC)  $(PROC_OPTION)  $*.pc
 

CCOMPILE与CPPCOMPILE变量为编译语言,对应C与C++,COMPILEOPTION为编译的选择项,对应的是要编译的源代码,
INCLUDEDIR为编译所需要引入的头文件,比如库头文件等,这里引用的是ORACLE数据库系统的头文件。
LIBDIRS为编译所需要引入的库文件,
OBJS为编译的目标库文件,OUTPUT为最终的执行程序名称,PROC_OPTION为PROC语言的编译选项,
clean为清除编译出的目标文件,
.c.o为编译生成目标库文件的命令集合
$(OUTPUT)为生成目标执行程序的命令集合