我的Makefile中有以下代码,但是我收到的错误提到O?=2
不是sh -c
可以运行的命令。我在这里做错了什么?
gcc:
O?=2
@if test -z "$(DEBUG)" ; then \
g++ -O${O} *.c -o palindrome ; \
fi
我试图将O
设置为2
,如果用户没有提供它,然后构建我的回文可执行文件。
确切错误:
$ make gcc
O?=2
/bin/sh: O?=2: command not found
make: *** [gcc] Error 127
$
答案 0 :(得分:2)
将它移到命令之外,以便它由“make”而不是shell处理:
O?=2
gcc:
@if test -z "$(DEBUG)" ; then \
g++ -O${O} *.c -o palindrome ; \
fi
答案 1 :(得分:2)
行O?=2
不是赋值,而是执行重建目标gcc
的命令。这意味着它被送到$(SHELL),它不知道它的事情。如果你想要一个变量assingment,把它自己放在行上而不是作为命令的一部分:
O?=2
gcc:
@if test -z "$(DEBUG)" ; then \
g++ -O${O} *.c -o palindrome ; \
fi
您可以使用O = 2
。当用户在命令行上提供值时,它将覆盖它:
make O=1
将使用-O1
进行优化。