Linux多个cpp⽂件的编译(Makefile编写)    最近公司项⽬移植到linux下开发,使⽤了开源库,学习了下Makefile如何编译多个cpp⽂件
#程序版本号
VERSION = 1.0.0
#定义变量,使⽤变量:$(变量名)
CC=g++
#定义变量srcs,表⽰需要编译的源⽂件,需要表明路径,如果直接写表⽰这些cpp⽂件和makefile在同⼀个⽬录下,如果有多个源⽂件,每⾏以\结尾#其中wildcard和patsubst为关键字不同⽬录下cpp⽂件,$(wildcard *.cpp /xxx/xxx/*.cpp), 替换所有的cpp为o表⽰ $(patsubst %cpp,%o,$(SRCS)) SRCS=$(wildcard *.cpp)
#将.cpp源⽂件编译成.o⽂件: 定义变量OBJS,表⽰将原⽂件中所有以.cpp结尾的⽂件替换成以.o结尾,
OBJS=$(SRCS:.cpp=.o)
#头⽂件路径,实际编译把依赖头⽂件路径放⼊环境变量
INCLUDES = -I/home/gocode/src/CSrc/include
#库⽂件名字
LIBS = -llog4cpp -lpqxx -lpq -lIVS_SDK
#库⽂件路径,实际编译把依赖头⽂件路径放⼊环境变量
LIB_PATH = -L/home/gocode/src/CSrc/lib
#宏定义在代码调试的过程中,我们通常会加个宏定义来控制此段代码是否被编译
DEBUG = -D_MACRO
#编译标志位
CFLAGS = -Wall -c
#定义变量,表⽰最终⽣成的可执⾏⽂件名
TARGET = main
#⽣成最终可执⾏⽂件
$(TARGET): $(OBJS)
@mkdir -p output/ #创建⼀个⽬录,⽤于存放已编译的⽬标
$(CC) -std=c++11 $(OBJS)  $(LIB_PATH) $(LIBS) -pthread -o output/$(TARGET)
#所有的[.cpp]⽂件都编译成[.o]⽂件
%.o: %.cpp
$(CC) -std=c++11  $(INCLUDES) $(LIB_PATH) $(LIBS) $(DEBUG) $(CFLAGS) -pthread $< -o $@  -wmakefile phony
#伪⽬标执⾏# make clean指令删除*.o⽂件
.PHONY: clean
clean:
rm -rf $(OBJS) output/
使⽤make编译⽣成可执⾏程序⽂件。
------------------------------------------------
写的不好,欢迎⼤佬指出问题,多谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。