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?