关于makefile的通用方案(个人测试推荐方案)

在使用linux或者mac时,有时大家会写一些自己测试功能一类的小程序,可是如果只有1个文件时候还可以,直接gcc就OK了。

而一旦文件多了以后可能就会很麻烦。这个makefile可以作为一个解决方案。

首先自己修改需要生成的程序文件名的获取脚本,我是测试这类的小程序都在一个文件夹下分不同的子文件夹,所以在子文件夹外加入这个文件FileName.sh,不要忘记执行权限哦。(其中的awk自行更改哦,我的路径是/Users/sohunjug/Documents/sohunjug/)

1
2
FileName=\`pwd | awk -Fsohunjug '{print $3}' | awk -F/ '{print $2}'\`
echo "$FileName"

之后就可以将makefile考入需要的路径,然后执行make,就会生成以子文件夹名来命名的程序了~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# gcc编译通用的Makefile文件
#######################################################
FileName=\`../FileName.sh\`
Exe=$(FileName)
CC = g++
CFLAGS = -Wall -g

OBJ_PATH = objs
LINKFLAGS = -ldl -lpthread

#Cpp文件夹
SRCDIR = .

CPP_SRCDIR = $(SRCDIR)
CPP_SOURCES = $(foreach d,$(CPP_SRCDIR),$(wildcard $(d)/*.cpp) )
CPP_OBJS = $(patsubst %.cpp, $(OBJ_PATH)/%.o, $(CPP_SOURCES))

default: test init compile

$(C_OBJS):$(OBJ_PATH)/%.o:%.c
$(CC) -c $(CFLAGS) < -o $@

$(CPP_OBJS):$(OBJ_PATH)/%.o:%.cpp
$(CC) -c $(CFLAGS) < -o $@

test:
@echo "$(FileName)"
@echo "CPP_SOURCES: $(CPP_SOURCES)"
@echo "CPP_OBJS: $(CPP_OBJS)"

init:
$(foreach d,$(SRCDIR), mkdir -p $(OBJ_PATH)/$(d);)

compile:$(C_OBJS) $(CPP_OBJS)
$(CC) $^ -o $(Exe) $(LINKFLAGS) $(LIBS)

clean:
rm -rf $(OBJ_PATH)
rm -f $(Exe)
########################################################
文章目录