make 도사님들께 질문입니다.

seldom의 이미지

비쥬얼 C++ 질문인데 그 쪽 사람들은 make 를 잘 모를듯 싶어 여기에 질문합니다. (nmake 입니다)
비쥬얼 C++ 의 IDE 에서 프로젝트를 makefile 로 export 하는 기능이 있습니다.
생성된 makefile 에 의아한 점이 있어 질문합니다.

INTDIR=.\Release
SOURCE=.\MySourceFile.cpp

"$(INTDIR)\MySourceFile.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\Project.pch"

각각의 소스 파일에 대해 저런 라인이 있습니다.

질문1)
Project.pch 는 프리컴파일드헤더이고 의존하는 것이 맞습니다.
그런데 "$(INTDIR)" 은 왜 있는 건가요?

질문2)
MSDN 을 뒤져보니 큰따옴표는 long filename 에 쓰인다고 했습니다.
그런데 위에서 보다시피 $(SOURCE) 는 long filename 임에도 불구하고 따옴표가 없습니다.
(뭐 이건 크게 궁금한 질문은 아닙니다만...)

익명 사용자의 이미지

답변1)
:의 오른쪽에 오는 것은 왼쪽에 있는 것이 생성되기 위해서 반드시 필요한, 의존성이 걸리는 파일들입니다.
release 디렉토리가 없으면 release\MySourceFile.obj 파일도 있을 수 없겠죠.

답변2)
글쎄요... 따옴표는 파일 이름이 길어서 쓰이는 거라기보다는 공백문자나 escape 문자를 위한 것이 아닌가요? 중간에 공백이 없다면 그냥 써도 별 문제 없나보죠. 이건 잘 모르겠습니다.

seldom의 이미지

Anonymous wrote:
답변1)
:의 오른쪽에 오는 것은 왼쪽에 있는 것이 생성되기 위해서 반드시 필요한, 의존성이 걸리는 파일들입니다.
release 디렉토리가 없으면 release\MySourceFile.obj 파일도 있을 수 없겠죠.

그 이유는 아닌 듯 합니다.
아래의 코드가 makefile 의 위쪽에 있습니다.

"$(INTDIR)" :
if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"

Fe.head의 이미지

위 아래는 상관 없습니다.

make 할때 시작 되는 지점이

all:

보통 로 시작되는 시작지점입니다.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

nangchang의 이미지

Quote:

질문1)
Project.pch 는 프리컴파일드헤더이고 의존하는 것이 맞습니다.
그런데 "$(INTDIR)" 은 왜 있는 건가요?

make는 실행하려는 rule의 target이 의존하고 있는 것들을

거꾸로 거슬러 올라가서 필요한 rule을 모두 실행한 다음 원래의

rule을 실행합니다. 위의 경우, 소스 파일은 $(INDIR)에 의존하고 있으며,

$(INDIR)을 생성하기 위한 rule은 의존성이 없으므로 항상 실행됩니다.

즉, 소스를 컴파일 하기 전에 항상

Quote:

if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"

를 실행해서 $(INDIR) 이라는 디렉토리가 있는 상태로 만들기 위함이죠.

Quote:

위 아래는 상관 없습니다.

make 할때 시작 되는 지점이

all:

보통 로 시작되는 시작지점입니다.

make 의 시작 지점이 무조건 all : 은 아니고요...

make를 실행할 때 target을 지정해주지 않으면 기본적으로

make 파일에서 제일 처음에 나타나는 rule부터 시작 합니다.

(보통은 all : 로 시작하는 rule이 제일 처음에 나오죠.)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.