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

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

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

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

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

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

# 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)
########################################################
文章目录

最近访客