layout | title | subtitle | date | author | tags |
post | Makefile要点 | 那些年我们一起踩过的Makefile大坑(其实并没有,是你丫比较菜而已。。。) | 2017-08-09 | cj | makefile c++ g++ |
Makefile 要点
- 不能用
~
表示 home
路径,可以用 $HOME
-
$(CXX) $(LDFLAGS) -o $(EXEC) $^ $(INCLUDEDIR) $(LIBDIR)
这种写法没问题,但是把$(INCLUDEDIR) $(LIBDIR)
放到 -o
前面就会出现 link 失败,wtf - 检测文件是否存在并执行命令检测配置文件是否存在,不存在就用模板创建一份并提示用户修改:
install: mkdir -p $(PROJDIR)/bin; \ cp $(PROJECT_NAME) $(PROJDIR)/bin/; \ ./build_symbols.sh $(PROJECT_NAME); ifeq ("$(wildcard $(PROJDIR)/bin/$(PROJECT_NAME).config)","") cp $(PROJECT_NAME).config.example $(PROJDIR)/bin/$(PROJECT_NAME).config @echo "You should edit $(PROJDIR)/$(PROJECT_NAME).config before running!" endif
- 使用
ifeq ... endif
,不能使用 [ ! -e /path/to/file ] && some-command
,当文件存在时会导致 make
失败 -
ifeq
和 endif
前面不能有空白 - 可以在
echo some-message
前面加上 @
: @echo some-message
,执行时不会重复输出