2017-11-29 6 views
1

makefile에서 간단한 C++ 클래스 생성기 (주어진 이름에 따라 다름)를 만들려고 시도하지만, 배시를 알지 못하고 실제로 어떻게 작동하는지 짜증나게합니다.makefile의 다중 행 에코

class: 
    @echo "Type class name: "; \ 
    read CLASS_NAME; \ 
    echo Creating class called $${CLASS_NAME}; \ 
    echo "Class $${CLASS_NAME} { 
    int x; 
    int y; 
    };">./$${CLASS_NAME}.h 

어떻게 마지막 에코 작업을 할 수 있습니까? 여러 줄을 에코하는 법을 모르겠습니다.

+1

호기심에서 - 당신이 실제로 있도록 SHELL''설정 한 당신 makefile이 쉘 명령을 실행할 때 bash를 시작하거나'/ bin/sh'을 사용하고 있습니까? –

+0

내 잘못, 당신이 말한대로 껍질해야합니다. – grubazhuberto

답변

2

여기 백 슬래시는으로 호출되어 으로 평가되며 호출되는 셸이 아닙니다. (마찬가지로, make은 셸에 전달하는 대신 줄 바꿈 자체를 제거합니다.

여기에 가장 쉬운 것은 그들이 문자 그대로 만들려고 노력하는 것보다 당신의 줄 바꿈을하지 않고 삽입 할 printf 형식 문자열을 사용하는 것입니다

class: 
     @echo "Type class name: "; \ 
     read CLASS_NAME; \ 
     echo "Creating class called $${CLASS_NAME}"; \ 
     printf '%s\n' "Class $${CLASS_NAME} {" 'int x;' 'int y;' '};' >"./$${CLASS_NAME}.h" 
+0

내가 원했던 것처럼 작동하는 덕분에 친구! 솔직히 말해서 나는 여기서 printf를 사용할 수 있다고 생각하지 못했습니다. – grubazhuberto

+0

'printf'는 실제로'echo'보다 더 이식성이 좋습니다; 대신에'printf'를 사용하는 방법과 이유를 기술 한 [echo'에 대한 POSIX 표준] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)의 APPLICATION USAGE 섹션을보십시오. –