本文共 1022 字,大约阅读时间需要 3 分钟。
1) Makefile:6: *** missing separator. Stop.
报出来Makefile的第6行有缺少分隔符问题. 打开Makefile文件,找到第6行,发现是该行的命令 顶行写,没有用Tab键隔离. 第六行行首加一个Tab键后问题解决. 注: 在makefile中,命令行要以tab键开头。 可通过.RECIPEPREFIX来修改tab为其他符号,如: .RECIPEPREFIX = > all: > echo $$pwd 2) = 和 :=的区别 我们可以使用这两个赋值符号用其它变量来给变量赋值。这两个赋值符号的效果不同。 对=符号,为动态赋值。右侧变量不一定非要是已定义好的值,其也可以使用后面定义的值。如: foo = $(bar) bar = aaa all: echo $(foo) 命令make all将打印出aaa。“:=”为静态赋值,不能用在当前代码之前还未定义的变量。如:
foo := $(bar) bar := aaa all: echo $(foo) 命令make all打印内容为空。3)make: *** cur-dir: command not found 问题
以下代码会导致如题的出错信息。 all: ifeq (0, ${MAKELEVEL}) cur-dir := $(shell pwd) endif原因: all之后的必须是可执行命令,不能定义变量。变量的定义可以放在all的前面。如:
ifeq (0, ${MAKELEVEL})
cur-dir := $(shell pwd) endif all: ... 也可以用define,如: ifeq (0, ${MAKELEVEL}) define cur-dir $(shell pwd) endef endif all: ... 注意:endef前面用空格,不能用tab键,否则可能会报出找不到endef。4) make: source: Command not found (Error 127) 问题
在makefile使用了source aaa.cshrc命令,然后报出上述问题。原因是make默认使用/bin/sh shell, 该shell不支持source命令。在makefile中修改shell:
ifeq($(shell uname),Linux)
SHELL := /bin/csh
endif
转载地址:http://nusoi.baihongyu.com/