1、Makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符,这个就像 C/C++中的“//”一样。如果你要在你的 Makefile 中使用“#”字符,可以用反斜框进行转义,如:“#”。
2、在 Makefile 中的命令,必须要以[Tab]键开始。
clean: FORCE
rm -rf $(BUILD_DIR) $(STAGING_DIR) $(BIN_DIR) $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES) $(BUILD_LOG_DIR) $(TOPDIR)/staging_dir/packages
dirclean: clean
rm -rf $(STAGING_DIR_HOST) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
rm -rf $(TMP_DIR)
3、引用其他Makefile
- include 这个是Makefile文件
- include $(TOPDIR)/include/host.mk 这个是.mk格式文件
4、显示命令
通常,make 会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被 make 显示出来,
$(BUILD_DIR)/.prepared: Makefile
@mkdir -p $$(dirname $@)
@touch $@
5、命令出错
每当命令运行完后,make 会检测每个命令的返回码,如果命令返回成功,那么 make 会执行下一条命令,当规则中所有的命令成功返回后,这个规则就算是成功完成了。如果一个规则中的某个命令出错了(命令退出码非零),那么 make 就会终止执行当前规则,这将有可能终止所有规则的执行。
些时候,命令的出错并不表示就是错误的。例如 mkdir 命令,为了做到忽略命令的出错,我们可以在 Makefile 的命令行前加一个减号“-”(在 Tab 键之后),标记为不管命令出不出错都认为是成功的。
clean:
-rm -f *.o
6、使用变量
-
变量是大小写敏感的, “foo”、 “Foo”和“FOO”是三个不同的变量名。
-
有一些变量是很奇怪字串,如“ < ” 、 “ <”、“ <”、“@”等,这些是自动化变量,我会在后面介绍。
-
变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“ ” 符 号 , 但 最 好 用 小 括 号 “ ( ) ” 或 是 大 括 号 “ ” 把 变 量 给 包 括 起 来 。 如 果 你 要 使 用 真 实 的 “ ”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“ ”符号,但最好用小括号“()”或是大括号“”把变量给包括起来。如果你要使用真实的“”字符,那么你需要用“$$”来表示。
-
我们可以使用“+=”操作符给变量追加值,如:
objects = main.o foo.o bar.o utils.o
objects += another.o -
如果有变量是通常 make 的命令行参数设置的,那么 Makefile 中对这个变量的赋值会被忽略。可以用这个符号 override =