c++ 的makefile文件实例

 

首先声明, 感谢九哥的帮助,因为从来没写过makefile, 所以一直是手动编译,

然后有一次写了三个文件, 需要编译, 而我只编译了一个文件, 所以一直出错, 九哥告诉我用makefile更方便, 可以学习一下

于是我就写了看了很多的blog, 然后向九哥要了这么个东西, 据说还有可以生成的工具

###########################################
#Makefile for simple programs
###########################################
#INC 是你项目包含的目录
INC=
#LIB是你需要链接的库
LIB= -lpthread
#CC是一个变量名 可以随便起,这里代表你的编译器
CC=g++
#LINK是链接的程序
LINK=g++
#LDFLAGS是链接的选项
LDFLAGS=
#CC_FLAG 是编译选项
CC_FLAG=-Wall -m64

# PRG=操作符重载, 这里是目录名字
PRG=aa
# 这里是空格隔开, 不能是逗号,需要注意
# root@corleone:/opt/code/testC++/aa# ls
# makefile  mytime0.cpp  mytime.h  usertime0.cpp
# 上面这是目录下的文件, 那需要写几个.o的文件呢? 就这么写
OBJ=mytime0.o  usertime0.o


#当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
#你会发现它下面是一个 table缩进,  table缩进 表示要执行那个命令
#然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
#比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令

$(PRG):$(OBJ)
    $(CC) $(INC) $(LIB) -o $@ $(OBJ)

#.SUFFIXES表示后缀名
#这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
.SUFFIXES: .c .o .cpp
.cpp.o:
    $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o


.PRONY:clean
clean:
    @echo "Removing linked and compiled files......"
    rm -f $(OBJ) $(PRG)

 

###########################################
#Makefile for simple programs
###########################################
#INC 是你项目包含的目录
INC=
#LIB是你需要链接的库
LIB= -lpthread
#CC是一个变量名 可以随便起,这里代表你的编译器
CC=g++
#LINK是链接的程序
LINK=g++
#LDFLAGS是链接的选项
LDFLAGS=
#CC_FLAG 是编译选项
CC_FLAG=-Wall -m64

PRG=threadpooltest
OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o


#当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
#你会发现它下面是一个 table缩进,  table缩进 表示要执行那个命令
#然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
#比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令

$(PRG):$(OBJ)
    $(CC) $(INC) $(LIB) -o $@ $(OBJ)

#.SUFFIXES表示后缀名
#这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
.SUFFIXES: .c .o .cpp
.cpp.o:
    $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o


.PRONY:clean
clean:
    @echo "Removing linked and compiled files......"
    rm -f $(OBJ) $(PRG)



###########################################
#这里举个复杂的例子
###########################################

#1    先找到$(XXXX):$(xxxx)
#2    去找"-o $@" 后面的目标有没有生成或者更新,有就重新编译那个目标
#3    "-o $@" 后面所有的目标都好了就开始链接主程序了
#    编译和链接都需要一些选项
#4    >> output表示输出重定向到文件,这样出错了比较好查找
all_objs= xxx1.o ../xxx2.o ../../xxx3.o
#all_libs是链接的库, -L指定库的目录, -l指定库的名字
all_libs=-L../../sourceapp/qmarket/xykjclient/  -lMarketApi  -lACE
#$(target): $(all_objs)
#    $(LINK) $(LDFLAGS) -o $@ $(all_objs) $(all_libs) $(LIB) >> output

#你可以自己加一些选项 比如下面的test  你在命令行 执行 make test,他就会执行那个缩进的命令
test:
    @echo "this is test"
View Code

 

posted @ 2018-06-22 14:51  我当道士那儿些年  阅读(528)  评论(0编辑  收藏  举报