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
,执行时不会重复输出
- 使用