2

我的 Makefile 中有以下代码,但我收到错误消息,指出O?=2它不是sh -c可以运行的命令。我在这里做错了什么?

gcc:
    O?=2
    @if test -z "$(DEBUG)" ; then \
      g++ -O${O} *.c -o palindrome ; \
    fi

我试图设置O2如果用户没有提供它,然后构建我的回文可执行文件。


确切的错误:

$ make gcc
O?=2
/bin/sh: O?=2: command not found
make: *** [gcc] Error 127
$
4

2 回答 2

2

将它移到命令之外,以便它由“make”而不是 shell 处理:

O?=2
gcc:
    @if test -z "$(DEBUG)" ; then \
      g++ -O${O} *.c -o palindrome ; \
    fi
于 2012-11-04T20:51:06.337 回答
2

该行O?=2不是分配,而是执行以重建目标的命令gcc。这意味着它被馈送到 $(SHELL),它对此一无所知。如果您想要一个变量分配,请将其单独放在线上,而不是作为命令的一部分:

O?=2

gcc:
    @if test -z "$(DEBUG)" ; then \
        g++ -O${O} *.c -o palindrome ; \
    fi

你可以只使用O = 2. 当用户在命令行上提供一个值时,它将覆盖它:

make O=1

-O1用于优化。

于 2012-11-04T20:52:51.763 回答