如何编写自己的Makefile
Makefile有什么用?
Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。我们在unix编程写的一些C项目的时候,如果不会写Makefile,那么编译的时候就会很麻烦,新手刚学习Makefile的时候又看不懂,我自己也是这样,然后自己花了一天的时间终于自己稍微了解了一些,作为一个新手,深知自学时候的困难,下面把我的学习整理给大家分享一下。
Makefile一些简单的语法
我们知道我们的写完的代码是需要经过编译连接之后才能运行的,所以我们的就按着我们的这些步骤来写一个简单的Makefile满足我们对Makefile语法的简单应用。
Makefile语法的核心就是一条,就是下面的格式:
这里需要注意的是,命令前面是一个tab键的宽度,如果你的tab是4个字节宽度就是4个,如果是8个就是8个,(我自己就经常看不爽8个宽度的,如果需要修改,就打开 vim /etc/vimrc 自己增加一行即可。
下面就是Makefile
首先创建名称为Makefile的文件,如果需要执行直接在Makefile目录下make就可以了
[ 通用的Makefile模板 2020/02/25更新 ]
TARGET=server
CC=g++
CFLAG=-c -g -static
#所有的.c文件
SRCS:=KaTeX parse error: Expected 'EOF', got '#' at position 35: …ERS=../hello.c #̲从SRCS中除了hello.c…(filter-out $(FILTERS),
(
S
R
C
S
)
)
O
B
J
S
:
=
(SRCS)) OBJS:=
(SRCS))OBJS:=(patsubst %.c, %.o,
(
S
R
C
S
)
)
C
U
R
R
E
N
T
P
A
T
H
=
(SRCS)) CURRENT_PATH=
(SRCS))CURRENTPATH=(PWD)
CPPFLAGS= -I…/include -I…/util
LIBS_PATH=-L…/lib64
LIBS=-lmylib
#判断是哪个系统32bit编译还是在64bit编译。
ARCH:=
(
s
h
e
l
l
u
n
a
m
e
−
m
)
i
f
e
q
(
(shell uname -m) ifeq (
(shelluname−m)ifeq((ARCH), x86_64)
VERSION:=X86_64
else
VERSION:=i686
endif
(
T
A
R
G
E
T
)
:
(TARGET):
(TARGET):(OBJS)
$(CC) $(DEBUG) $(SRCS) $(LIBS_PATH) $(LIBS) $(CPPFLAGS) -o $(TARGET)
$(OBJS):%.o:%.c
$(CC) $(CFLAG) $< -o $@
.PHONY:clean
clean:
rm -rf *~ *.bak $(TARGET)
建议与指正
如果各位又发现错误的或者不理解的地方,欢迎留言一起讨论,发现有错误的地方也欢迎指出,祝大家每天都有进步!!!!