首先声明, 感谢九哥的帮助,因为从来没写过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 -m64PRG=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"