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
,执行时不会重复输出
- 使用
Refs
- Conditional Parts of Makefiles
- How can I check a file exists and execute a command if not?
- How do I check if file exists in Makefile?