Linux如何修改makefile文件,linux中Makefile的使用

最近在写一个项目,由于项目的文件过多,所以就需要将文件进行类进行操作。这样会对代码的维护方便很多。这就需要对代码进行合理的整理,一个好的Makefile文件是很有帮助。由于学的不久,下面写的如果异议请指正。

Makefile编写

我将项目新建几个文件夹其中包括:include lib Src bin build 五个文件夹,其中include是将程序需要的头文件,lib是程序需要的库文件,src是程序的源码,bin是程序编译出来的可执行文件,Build是Makefile的文件放置处。

######################################

DIR_INC = $(shell pwd)/../Include

DIR_SRC = $(shell pwd)/../Src

DIR_BIN = $(shell pwd)/../Bin

DIR_LIB = $(shell pwd)/../Lib

DIR_BUI = $(shell pwd)/../Build

######################################

#source file

#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件

SRC := $(wildcard ${DIR_SRC}/*.c) $(wildcard ${DIR_SRC}/*.cpp)

OBJS := $(patsubst %.c,${DIR_OBJ}/%.o,$(patsubst %.cpp,%.o,${SRC}))

#target you can change test to what you want

#目标文件名,输入任意你想要的执行文件名

TARGET := SDK

#compile and lib parameter

#编译参数

CC := g++

LIBS := $(shell pkg-config –libs opencv) -L$(DIR_LIB)/ -limgutils

LDFLAGS :=

DEFINES :=

INCLUDE := $(shell pkg-config –cflags opencv) -I${DIR_INC}/

CFLAGS := -std=gnu++11 $(DEFINES) $(INCLUDE)

CXXFLAGS:= $(CFLAGS)

#you should not do anything here

.PHONY : everything objs clean veryclean rebuild

everything : $(TARGET)

all : $(TARGET)

objs : $(OBJS)

rebuild: veryclean everything

clean :

rm -fr $(DIR_SRC)/*.so

rm -fr $(DIR_SRC)/*.o

veryclean : clean

rm -fr $(TARGET)

$(TARGET) : $(OBJS)

$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)

上面为整个Makefile文件,其中第一部分为文件夹的定义,将所放文件的文件夹定义好,后面可以很好进行使用。

第三部分是编译器的链接选项:即添加库文件,添加头文件,添加编译器,添加各种链接

第四部分为执行部分,执行部分分为目标和依赖,要生成目标文件就要先生成依赖文件,

target … : prerequisites …

command

上面为Makefile的基本用法,目标依赖命令。上面是Makefile的一些基本用法,如果想知道更加详细请查阅资料

库文件编译

下面为编译库文件时所需要的Makefile文件

######################################

DIR_INC = $(shell pwd)/../../Include

DIR_LIB = $(shell pwd)/../../Lib

DIR_OBJ = $(PWD)/../../Obj

######################################

#target you can change test to what you want

#共享库文件名,lib*.so

TARGET := $(DIR_LIB)/libdoorimgadd.so

#compile and lib parameter

#编译参数

CC := g++

LIBS := $(shell pkg-config –libs opencv)

LDFLAGS :=

DEFINES :=

INCLUDE := $(shell pkg-config –cflags opencv) -I$(DIR_INC)/

CFLAGS := -g -Wall -O3 -std=gnu++11 $(DEFINES) $(INCLUDE)

CXXFLAGS:= $(CFLAGS)

#source file

#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件

SOURCE := $(wildcard *.c) $(wildcard *.cpp)

OBJS := $(addprefix $(DIR_OBJ)/,$(patsubst %.cpp,%.o,$(SOURCE)))

.PHONY : everything objs clean veryclean rebuild

all : $(TARGET)

clean :

rm -fr *.o

veryclean : clean

rm -fr $(TARGET)

# 生成.o文件

$(DIR_OBJ)/%.o : %.cpp

$(CC) $(CXXFLAGS) -fpic -c $

#生成动态库文件

$(TARGET) : $(OBJS)

$(CC) -shared -o $@ $(OBJS)

在编译动态库时,-shared 和-fpic 需要进行添加,添加的位置需要注意否则会编译不成功,在顶层的Makefile中,加上一句

@list=’$(SUBDIRS)’;for subdir in $$list; do

cd $$subdir && make;

done

上句查找子文件里的Makefile,然后将子文件夹里的Makefile进行编译。

2156d6cf1da04ebf368ef53db680196d.png感谢您的支持

感谢您的支持

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25046 人正在系统学习中 相关资源:诗词鉴赏大全软件-教育文档类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月25日
下一篇 2021年3月25日

相关推荐