2011-04-20 3 views

답변

6

메이크 파일 규칙의 명령은 단순히 셸에 공급되므로 절대 따옴표를 사용하는 것이 중요합니다. 이 규칙은 작동합니다

libmylib.a: ... 
    $(AR) $(ARFLAGS) [email protected] $? 

을하지만,이 하나되지 않습니다

libmylib.a: ... 
    "$(AR) $(ARFLAGS) [email protected] $?" 

당신은 아마 말,라는 하나의 명령이 없기 때문에 두 번째는 심지어 불구하고, ar -r libx.a a.o b.o 작동하지 않습니다 -r libx.a a.o b.o 인수 목록을 사용하여 수행 할 작업을 알고있는 ar 명령이 있어야합니다.

rule1: 
    @echo Compiler: $(CXX) 

rule2: 
    echo "Compiler: $(CXX)" 

은 일반적으로 동일한을 생산합니다 :

두 번째 예 : 따옴표가 내장 echo 그래서이 두 가지 규칙 쉘에 대한 인수 주위에 있기 때문에

@echo Compiler: $(CXX) 
# vs 
@echo "Compiler: $(CXX)" 

는 약간 다르다 출력 (물론, 이름에 ">"가있는 이상한 C++ 컴파일러 명령이 없으면이 경우 원하는 출력은 C++ 컴파일러의 이름을 붙잡은 사람의 머리가 될 수 있습니다. 그것은 심지어 GNU m의 능력을 넘어선 것입니다. 아케).

rule3: 
    @echo Compiler:   $(CXX) 

rule4: 
    echo "Compiler:   $(CXX)" 

규칙 3이 규칙 1과 같은 일을 할 것입니다하지만 공백의 무리와 함께 문자열을 rule4 인쇄 할 것이다 : 반면에,이 두 가지 규칙으로 인해 따옴표의 상호 작용과 공백에 약간 다른 출력을 생성 할 중간에.

+0

아주 좋은 대답입니다. 감사! – pic11

관련 문제