我自己写的一个makefile,研究了2周,写的还是这么粗糙,惭愧。。
来源:互联网 发布:doom4优化 编辑:程序博客网 时间:2024/04/30 06:13
#设置编译器参数
CC = gcc
AR= ar
#objects= base.o error.o shellsort.o sortfile_line.o string.o string.c
#设置程序名
result := wanwan
result ?= sortfile_line
#LIBS=$(result).lib
#文件目录
SRC :=./src ./
HEAD :=./head
OBJ :=./obj
CONFIG :=./config
DEPEND :=./depend_f
LIB := libwanwan.a
#目录变换
INCDIR += ./ $(HEAD) E:/cygwin/usr/include
INCLUDE += $(foreach dir, $(INCDIR), -I$(dir))
SRC_C := $(foreach dir, $(SRC), $(wildcard $(dir)/*.c))
SRC_S := $(notdir $(SRC_C))
object_s := $(patsubst %.c, %.o, $(SRC_S) )
object_o := $(patsubst %.o, $(OBJ)/%.o, $(object_s))
#make程序的搜索路径
#VPATH = $(SRC):$(HEAD):$(OBJ):./
vpath %.h $(HEAD) E:/cygwin/usr/include
vpath %.o $(OBJ)
vpath %.c $(SRC)
#编译参数
#INCLUDE += -I../..
flags= -Wall $(INCLUDE)
#嵌套编译
ifeq (0,$(MAKELEVEL))
cur-dir := $(shell pwd)
whoami := $(shell whoami)
MAKE := $(MAKE) whoami=$(whoami) sur-dir=$(cur-dir)
endif
subdirs := config
#依赖文件删除命令包
define depend_d
-rm $(DEPEND)/*.d -f
@echo -e "Delete $(DEPEND)/*.d doing...\n"
# -@rm print ola list
endef
#编译结果
$(result) : setup $(object_o)
$(CC) -o $@ $(object_o)
lib: $(LIB) ;
$(LIB): $(object_o)
$(AR) -cr $@ $^
applib: $(LIB)
$(CC) $(flags) -o $@ $(LIB)
r_lib: $(LIB)
@[ -d ./obj ] || mkdir ./obj
@cd ./obj && $(AR) -x ./../$<
print:
$(CC) $(flags) -o $@ $(wildcard $(SRC)/*.c)
#object_s := $(foreach dir, $(object), )
ola: setup $(object_o)
# $(MAKE) -C $$CONFIG all && pwd
@for dir in $(CONFIG); do \
$(MAKE) -C $$dir || exit 1; \
done
pwd
$(CC) -o $@ $(object_o)
#目录检测,为防止报错
setup:
@test -d $(OBJ) || mkdir $(OBJ)
#$(foreach file,$(objects), $(OBJ)/$(file))
#objects_t = $(wildcard $(OBJ)/*.o)
#模式规则
$(filter %.o ,$(object_o)) : $(OBJ)/%.o : %.c
$(CC) $(flags) -o $@ -c $<;
.PHONY: clean depend lint
clean:
-rm $(objects) *.o $(OBJ) *.lib *.bin $(result) *.exe -rf
# @$(depend_d)
.DEFAULT:
@echo -e "wo kao!,搞什么啊这是...?"
depend:
@$(CC) $(flags) -MM $(wildcard $(SRC)/*.c) > depend.mk
#-include depend.mk
#依赖性文件包含
-include $(SRC_S:%.c=$(DEPEND)/%.d)
#产生依赖性文件,并放在$(DEPEND)目录中
$(DEPEND)/%.d: %.c
@test -d $(DEPEND) || mkdir $(DEPEND)
@$(CC) $(flags) -MM $< > $@.$$$$; \
cat $@.$$$$ | sed -e 's/\(.*\)\.o/\$$\(OBJ\)\/\1.o/g' | \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@; \
rm -f $@.$$$$
# mv -f *.d $(OBJ)
#lint:
#ifeq (Linux, $(shell uname))
# -splint $(SRC_C) $(INCLUDE) +posixlib
#else
# -LINT-NT $(SRC_C) -i$(INCDIR)
#endif
#lint源代码静态检查
lint:
@if uname | grep -i 'linux';\
then splint $(SRC_C) $(INCLUDE) +posixlib -exportlocal -shadow \
-nestedextern -exitarg -retvalint -compdef -mustdefine -paramuse &> \
lint.txt || unix2dos lint.txt && exit 0;\
else LINT-NT $(SRC_C) $(INCLUDE) &> lint.txt || unix2dos lint.txt && exit 0;\
fi
- 我自己写的一个makefile,研究了2周,写的还是这么粗糙,惭愧。。
- 才写了这么点,我写的好乱
- 自己写的一个通用Makefile
- 自己写一个简单通用的Makefile
- 自己写一个简单通用的Makefile
- 我自己也写了一个八皇后的程序
- POJ 1580 String Matching 很纠结,代码写了很多,还是过了,再对比一下人家的代码,惭愧
- 这么久了开始写自己的博客
- 刚开始学servlet把自己刚写的一个小页面贴出来写的很粗糙
- 我自己写的一个表情组件
- 自己写的一个多文件的makefile的例子
- 我写了一个英文的comments
- 自己写了一个Ext4.2的.JSB文件
- 自己研究写的一个弹幕库的功能
- 今天,我写的makefile犯的一个错
- 从现在起 我开始写我自己的技术博客了
- 写一个简单的makefile
- 写一个简单的makefile
- 如何更有效的发布招聘信息
- 使用mm单独编译android的APP时出现错误
- 直接运行内存中的程序
- VS addin 例子(附源码)
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- 我自己写的一个makefile,研究了2周,写的还是这么粗糙,惭愧。。
- Problem B bfs
- Service----样例一
- hdu_3407_Zjnu Stadium(带权并查集)
- ucore lab1 任务三
- xcode 快捷键
- Linux 下 socket 编程示例
- Android 简单的使用api 播放在线视频
- 插头DP(HDOJ1693)初识