2012-11-04 34 views
2

我在我的Makefile中有以下代码,但我得到的错误提到O?=2不是sh -c可以运行的命令。我在这里做错了什么?Makefile - 如何区分变量赋值和命令

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 
$ 

回答

2

移动它的命令外,使得它得到由 “制造”,而不是壳处理:

O?=2 
gcc: 
    @if test -z "$(DEBUG)" ; then \ 
     g++ -O${O} *.c -o palindrome ; \ 
    fi 
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进行优化。

+0

非常感谢Olaf! – Moeb