make 도사님들께 질문입니다.
글쓴이: seldom / 작성시간: 토, 2005/04/16 - 12:05오전
비쥬얼 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 임에도 불구하고 따옴표가 없습니다.
(뭐 이건 크게 궁금한 질문은 아닙니다만...)
Forums:
답변1):의 오른쪽에 오는 것은 왼쪽에 있는 것이 생성되기 위해서 반
답변1)
:의 오른쪽에 오는 것은 왼쪽에 있는 것이 생성되기 위해서 반드시 필요한, 의존성이 걸리는 파일들입니다.
release 디렉토리가 없으면 release\MySourceFile.obj 파일도 있을 수 없겠죠.
답변2)
글쎄요... 따옴표는 파일 이름이 길어서 쓰이는 거라기보다는 공백문자나 escape 문자를 위한 것이 아닌가요? 중간에 공백이 없다면 그냥 써도 별 문제 없나보죠. 이건 잘 모르겠습니다.
[quote="Anonymous"]답변1):의 오른쪽에 오는 것은 왼
그 이유는 아닌 듯 합니다.
아래의 코드가 makefile 의 위쪽에 있습니다.
"$(INTDIR)" :
if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
위 아래는 상관 없습니다.make 할때 시작 되는 지점이
위 아래는 상관 없습니다.
make 할때 시작 되는 지점이
all:
보통 로 시작되는 시작지점입니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
[quote]질문1)Project.pch 는 프리컴파일드헤더이고
make는 실행하려는 rule의 target이 의존하고 있는 것들을
거꾸로 거슬러 올라가서 필요한 rule을 모두 실행한 다음 원래의
rule을 실행합니다. 위의 경우, 소스 파일은 $(INDIR)에 의존하고 있으며,
$(INDIR)을 생성하기 위한 rule은 의존성이 없으므로 항상 실행됩니다.
즉, 소스를 컴파일 하기 전에 항상
를 실행해서 $(INDIR) 이라는 디렉토리가 있는 상태로 만들기 위함이죠.
make 의 시작 지점이 무조건 all : 은 아니고요...
make를 실행할 때 target을 지정해주지 않으면 기본적으로
make 파일에서 제일 처음에 나타나는 rule부터 시작 합니다.
(보통은 all : 로 시작하는 rule이 제일 처음에 나오죠.)
댓글 달기