본문 바로가기
Research/Programming

make:하나의 목표에 대하여 여러 명령을 쓰면

by sunnyan 2002. 12. 5.
728x90
http://kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-3.html--------------------------------------------------------------------------------
target:
        cd obj
        HOST_DIR=/home/e
        mv *.o $HOST_DIR
--------------------------------------------------------------------------------
하나의 목표에 대하여 여러 명령을 쓰면 예기치 않은 일이 벌어집니다. 기술적으로 말하자면 각 명령은 각자의 서브쉘에서 실행되므로 전혀 연관이 없습니다. -.- cd obj 도 하나의 쉘에서 HOST_DIR=/home/e도 하나의 쉘에서 나머지도 마찬가지입니다. 각기 다른 쉘에서 작업한 것처럼 되므로 cd obj 했다 하더라도 다음번 명령의 위치는 obj 디렉토리가 아니라 그대로 변함이 없이 현재 디렉토리입니다. 세번째 명령에서 HOST_DIR 변수를 찾으려 하지만 두번째 명령이 종료한 후 HOST_DIR 변수는 사라집니다.
--------------------------------------------------------------------------------
target:
        cd obj ;
        HOST_DIR=/hom/e ;
        mv *.o $$HOST_DIR
--------------------------------------------------------------------------------
이렇게 적어주셔야 합니다. 세미콜론으로 각 명령을 구분하지요. 처음 두 줄의 마지막에 쓰인 역슬래쉬() 문자는 한 줄에 쓸 것을 여러 줄로 나누어 쓴다는 것을 나타내고 있습니다.

주의! 세번째 줄에 $HOST_DIR이 아니라 $$HOST_DIR인 것을 명심하십시요. 예를 하나 들어보죠. ^^
--------------------------------------------------------------------------------
all:
         HELLO="안녕하세요?";
         echo $HELLO
--------------------------------------------------------------------------------
Makefile의 내용을 이렇게 간단하게 만듭니다.
$ make
HELLO="안녕하세요?";
echo ELLO
ELLO
<verb>

우리가 원하는 결과가 아니죠?

$HELLO를 $$HELLO로 바꾸어보십시요.

<verb>
$ make
HELLO="안녕하세요?";
echo $HELLO
안녕하세요?
--------------------------------------------------------------------------------
all:
         @HELLO="안녕하세요?"; echo $$HELLO
--------------------------------------------------------------------------------

명령의 맨 처음에 @ 문자를 붙여봅시다.

$ make
안녕하세요?


728x90

'Research > Programming' 카테고리의 다른 글

Why do a lot of #defines in the kernel use do { ... } while(0)?  (0) 2004.12.18
변수사용에 관하여...  (0) 2003.11.26
#, ##  (0) 2002.12.04
C Bit Fields  (0) 2002.12.04
__cdecl을 사용하는 이유 ?  (0) 2002.12.04