[완료]간단한 문법에 관해 질문 드립니다.ㅠ.ㅠ
글쓴이: hohuha / 작성시간: 금, 2011/12/09 - 10:23오전
compile을 하려고 합니다.
Make 파일의 소스 코드는 다음과 같습니다...
1 set exe=$1 2 set objs="" 3 echo "========================" 4 echo "TARGET : < $exe > " 5 foreach source ($argv[*]) 6 set objs="$objs$source.o " 7 if (-e $source.pc) then 8 rm $source.c >&/dev/null 9 rm ${PROJ_HOME}/server_test/bin/$source >&/test/nn 10 else 11 if (-e $source.c) then 12 else 13 echo "No File $source.(c|pc)" 14 exit 0 15 endif 16 endif 17 end 18 echo " 컴파일 start" 19 make -f ${SVR_HOME}/test.mak EXE="$exe" OBJS="$objs" 20 echo " 컴파일 end" 21 echo "========================"
질문1
1번째 라인의 "$1"은 무엇을 말하는 것입니까?
질문2
5번째 라인의 foreach source ($argv[*]) 에서 source와 $argv[*]은 무엇을 의미하는건가요?
또 $source는 무엇인가요?
질문3
if (-e $source.pc) then
이 부분은 무엇인가요?
제 질문이 너무 한심하게 느껴지실겁니다.
일단 공부먼저 하라고 하실테지만.. 소스만 던져주고 빨리 처리해야한다고 하고 알려주는 사람도 없고
책붙잡고 앉아있을 형편도 안됩니다.ㅠ.ㅠ..
인터넷만 하염없이 뒤지고 있는데 우선 제가 알고자 하는 문법적인 부분은 나와있지 않아 답답한 마음에 올립니다.ㅠ.ㅠ
꼭 답변 부탁드립니다...ㅠ.ㅠ..
Forums:
첫 눈이 내린 날의 코딩...
http://wiki.kldp.org/wiki.php/ShellProgrammingTutorial
여기 보시면 대부분의 의문들이 풀리실 겁니다. 특히 질문 1, 3은 매우 기초적인 것이니...
make 파일 소스같진 않군요
아무리 봐도 make파일 소스는 아니군요
쉘스크립트 파일 같습니다.
올려주신 파일을 build.sh로 저장한 후 실행해봤습니다.
파서는 csh로 설정했습니다.
(csh 스크립트로 가정, 그래서 기분적인 문법 설명은 man csh)
$ ./build.sh hello1 hello2 hello3
========================
TARGET : < hello1 >
No File hello1.(c|pc)
질문1번에 대한 답변: $1에 hello1이 들어간걸 보니 첫번째 아큐먼트군요.
$argv[*]는 $로 시작하니 변수겠고 echo로 출력해 보겠습니다.
$ ./build.sh hello1 hello2 hello3
========================
TARGET : < hello1 >
$ argv[*] ==> hello1 hello2 hello3
질문2번에 대한 답변: c처럼 argv는 아큐먼트 리스트이군요.
source는 올려주신 소스가 csh라는 가정하에 man csh해보시면 foreach 사용법을 보실 수 있습니다.
foreach name (wordlist)
...
end
결국 source는 wordlist 중 하나를 가르키는 변수명입니다.
if 문은.... 대충 짐작으로 e가 exist의 약자 같은 느낌이 드네요. 자세한건 역시 man csh를 해보세요.
질문3번에 대한 답변: if (-e XXX)는 파일이 있는지 확인하는 루틴입니다.
$ ./build.sh hello hello1
========================
TARGET : < hello >
$ argv[*] ==> hello hello1
build.sh는 존재합니다
No File hello1.(c|pc)
$ cat ./build.sh
#!/bin/tcsh
set exe=$1
set objs=""
echo "========================"
echo "TARGET : < $exe > "
echo "$ argv[*] ==> $argv[*]"
if (-e build.sh) then
echo "build.sh는 존재합니다"
endif
foreach source ($argv[*])
set objs="$objs$source.o "
if (-e $source.pc) then
rm $source.c >&/dev/null
rm ${PROJ_HOME}/server_test/bin/$source >&/test/nn
else
if (-e $source.c) then
else
echo "No File $source.(c|pc)"
exit 0
endif
endif
end
echo " 컴파일 start"
make -f ${SVR_HOME}/test.mak EXE="$exe" OBJS="$objs"
echo " 컴파일 end"
echo "========================"
없음
윗분말씀대로 올려주신 코드는 makefile의 코드가
윗분말씀대로 올려주신 코드는 makefile의 코드가 아니고,
makefile을 부르는 쉘스크립트입니다.
그 스크립트 파일명을 compile.sh 라고 하면,
compile.sh result src1 src2 src3
이렇게 실행을 시키면,
result.c src1.c src2.c src3.c 를 컴파일하여 result.exe 를 만들어내는 코드입니다.
중간에 if문이 좀 이상한데,
src1.pc 파일이 있으면 src1.c 파일을 지우라는 뜻이고,
src1.pc 파일이 없고, src1.c 파일도 없으면 에러를 출력합니다.
(입력으로 주어진 다른 파일에 대해서 모두 동일하게 확인)
최종적으로는 make -f .. 명령어가 실제 컴파일을 하라는 명령어입니다.
${SVR_HOME}/test.mak 파일을 호출하여 make를 수행하게 됩니다.
다른 글에서 올리신 디렉토리 문제는 아마도
SVR_HOME 변수에 특정디렉토리가 설정되어있어서 그런것 같습니다.
답변들 너무 감사합니다.ㅠ.ㅠ
한번에 확 이해가 가지 않으나 열심히 분석해보고 궁금한점 다시 질문드리겠습니다.감사합니다.ㅠ....ㅠ.
답변들 너무 감사합니다.ㅠ.ㅠ
한번에 확 이해가 가지 않으나 열심히 분석해보고 궁금한점 다시 질문드리겠습니다.감사합니다.ㅠ....ㅠ.
댓글 달기