含泪写了个把.o文件放入指定目录的Makefile
不想在vscode的Explorer里看见*.o,除了File-Preference-Settings, Search settings (File.Exclude),还可以改Makefile,把*.o放在某个目录(如o)下嘛。
一堆.d文件不如一个.dep文件高档。
array.o: array.c awk.h config.h gettext.h mbsupport.h protos.h regex.h \ dfa.h gawkapi.h awkgram.o: awkgram.c awk.h config.h gettext.h mbsupport.h protos.h \ regex.h dfa.h gawkapi.h ...
这种带折行的,咋用sed把array.o换成o/array.o,dfa.h那行不动?sed替换所有行要用到1,$吧[%好像不好使],Makefile里要写成\$$,再往下更费劲。
终于折腾出不用sed,人人能看懂会修改的版本啦:
- vpath使make到o/下去找.o文件
- a.exe依赖于array.o等,array.o依赖于array.c awk.h等等,make is happy
TARGET = a.exe SRCEXT = c OBJDIR = o CC = gcc CFLAGS = -g # -Os SRCS = $(wildcard *.$(SRCEXT)) OBJS = $(patsubst %.$(SRCEXT),%.o, $(SRCS)) # $(patsubst pattern, replacement, text) pattern substitute #, %.o ,会产生空格 vpath %.o $(OBJDIR) $(TARGET) : $(OBJS) cd $(OBJDIR); $(CC) -o ../$@ $(OBJS) .$(SRCEXT).o: # $< 第一个 $(CC) $(CFLAGS) -c -o $(OBJDIR)/$@ $< clean: # -忽略命令的exit值 -cd $(OBJDIR); rm -f $(OBJS) dep: $(CC) $(CFLAGS) -MM $(SRCS) >.dep wtf: # What the fuck (什么鬼) 用@打头则不echo要执行的命令 @echo SRCS=$(SRCS) @echo OBJS=$(OBJS) -include .dep # -使得当.dep不存在时不报错 # https://www.cnblogs.com/xin-lover/p/8934158.html # https://www.cnblogs.com/haoxing990/p/4629454.html # https://www.cnblogs.com/guolongnv/articles/8728353.html # https://www.cnblogs.com/geeker/p/4455538.html # https://blog.csdn.net/qinglongqishi1/article/details/80419332 # https://programmer.group/gcc-m-mm-mmd-mf-mt.html gcc -g -c -o o/array.o array.c gcc -g -c -o o/awkgram.o awkgram.c gcc -g -c -o o/builtin.o builtin.c gcc -g -c -o o/cint_array.o cint_array.c gcc -g -c -o o/dfa.o dfa.c gcc -g -c -o o/eval.o eval.c gcc -g -c -o o/field.o field.c gcc -g -c -o o/gawkmisc.o gawkmisc.c gcc -g -c -o o/int_array.o int_array.c gcc -g -c -o o/main.o main.c gcc -g -c -o o/node.o node.c gcc -g -c -o o/re.o re.c gcc -g -c -o o/regex.o regex.c gcc -g -c -o o/str_array.o str_array.c gcc -g -c -o o/symbol.o symbol.c cd o; gcc -o ../a.exe array.o awkgram.o builtin.o cint_array.o dfa.o eval.o field.o gawkmisc.o int_array.o main.o node.o re.o regex.o str_array.o symbol.o
Commands in a Makefile- Microsoft Learn | make Command - IBM Documentation
Don't stop make'ing if a command fails, but check exit status
$ cat Makefile default: @-rm non @-rm exist $ make rm: cannot remove 'non': No such file or directory make: [Makefile:2: default] Error 1 (ignored) rm: cannot remove 'exist': No such file or directory make: [Makefile:3: default] Error 1 (ignored) 其实@和-都起作用了。没有-f的rm输出错误信息,make不管。rm出错,make也不管,继续执行。 $ man make -s, --silent, --quiet --trace -i, --ignore-errors ...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2021-12-26 nb是number的缩写
2021-12-26 std::bind与std::ref, why and how
2021-12-26 A Child's History of England.66
2021-12-26 g++协程演示
2021-12-26 gcc里的coroutine_handle
2021-12-26 affix
2021-12-26 affluent