[완료]간단한 문법에 관해 질문 드립니다.ㅠ.ㅠ

hohuha의 이미지

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
이 부분은 무엇인가요?

제 질문이 너무 한심하게 느껴지실겁니다.
일단 공부먼저 하라고 하실테지만.. 소스만 던져주고 빨리 처리해야한다고 하고 알려주는 사람도 없고
책붙잡고 앉아있을 형편도 안됩니다.ㅠ.ㅠ..

인터넷만 하염없이 뒤지고 있는데 우선 제가 알고자 하는 문법적인 부분은 나와있지 않아 답답한 마음에 올립니다.ㅠ.ㅠ
꼭 답변 부탁드립니다...ㅠ.ㅠ..

kalevala의 이미지

http://wiki.kldp.org/wiki.php/ShellProgrammingTutorial

여기 보시면 대부분의 의문들이 풀리실 겁니다. 특히 질문 1, 3은 매우 기초적인 것이니...

ihavnoth의 이미지

아무리 봐도 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 "========================"

없음

qiiiiiiiip의 이미지

윗분말씀대로 올려주신 코드는 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 변수에 특정디렉토리가 설정되어있어서 그런것 같습니다.

hohuha의 이미지

한번에 확 이해가 가지 않으나 열심히 분석해보고 궁금한점 다시 질문드리겠습니다.감사합니다.ㅠ....ㅠ.

hohuha의 이미지

한번에 확 이해가 가지 않으나 열심히 분석해보고 궁금한점 다시 질문드리겠습니다.감사합니다.ㅠ....ㅠ.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.