2012-11-04 35 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