2012-11-25 2 views
0

저는 this generic makefile을 사용하고 있습니다. 이 사용자 지정 옵션을Makefile 오류 : SDL 및 OpenGL로 컴파일 된 구분 기호가 누락되었습니다.

:

# The pre-processor options used by the cpp (man cpp for more). 
CPPFLAGS = -Wall -I/Library/Frameworks/SDL.framework/Headers 

# The options used in linking as well as in any direct use of ld. 
LDFLAGS = -framework SDL -framework Cocoa -framework OpenGL 

# The executable file name. 
# If not specified, current directory name or `a.out' will be used. 
PROGRAM = app 

# The source file types (headers excluded). 
# .c indicates C source files, and others C++ ones. 
SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp .m 

clean: 
    $(RM) $(OBJS) $(PROGRAM) $(PROGRAM) 

대신 :

# The pre-processor options used by the cpp (man cpp for more). 
CPPFLAGS = -Wall 

# The options used in linking as well as in any direct use of ld. 
LDFLAGS = 

# The executable file name. 
# If not specified, current directory name or `a.out' will be used. 
PROGRAM = 

# The source file types (headers excluded). 
# .c indicates C source files, and others C++ ones. 
SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp 

clean: 
    $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe 

Here 당신은 내가 실행 해요 메이크 파일의 전체 버전을 찾을 수 있습니다.

Mac OS X 10.6.8을 gcc 4.2.1과 함께 사용하고 있으며 main.cppSDLMain.mSDLMain.h과 함께 SDL 및 OpenGL을 사용하여 컴파일하려고합니다. 팝업

오류 :

-n ./ 
main.o: main.cpp 

문제가 무엇 :

main.d:1: * missing separator. Stop.

와 (메이크 파일에 의해 생성) 파일 main.d이 무엇입니까?

+0

당신이 여기에 전체 파일을 전시하고 있습니까를? 왜냐하면 나는'include'줄을 보지 않았지만 그것은 별도의 파일 ('main.d')의 내용에 대해 불평하고있다. * // 오류 메시지 읽기 : 사용자가 수행하는 작업 * – dmckee

+0

@dmckee [This] (http://pastebin.com/fqXxDesJ)는 해당 파일의 전체 붙여 넣기입니다. (또한 내 질문의 첫 번째 줄을 유의하십시오.) – Shoe

+1

* "(내 질문의 첫 번째 줄을주의하십시오.)"* 사이트 외부에서 코드를 읽지 않습니다. 질문은 자신의 것으로 써야합니다. 특히 사이트를보기 위해 여러 번 클릭해야한다면 코드를 읽지 않아도됩니다.기존 의존성 파일 ('.d')에 문제가 있습니다. 그 (것)들을 맑게하고 재발하는지보십시오. – dmckee

답변

0

나는 printfecho -n를 교체하고 문제 해결 :

# Rules for creating dependency files (.d). 
#------------------------------------------ 

%.d:%.c 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.C 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.cc 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.cpp 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.CPP 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.c++ 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.cp 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.cxx 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 

%.d:%.m 
    @printf $(dir $<) > [email protected] 
    @$(DEPEND.d) $< >> [email protected] 
+0

실제로 행이 * 이해 *합니다! 종속성이 없으면 하위 디렉토리의 파일을 올바르게 처리하지 못합니다. 문제는 사용 된'echo' (아마도 여러분의 설정에서'make'에 의해 사용 된 셸에 내장 된 쉘)입니다.'-e'의 끝에서 개행을 억제해야하는'-n' 옵션을 이해하지 못합니다. 출력. –

+0

@ DietmarKühl,'printf'는 똑같이 작동합니까? – Shoe

+0

네, 그렇게 생각합니다. 분명히, 당신은'-n' 옵션을 사용하지 않을 것이지만 형식으로부터 어떤 개행 문자도 빠뜨리지 않을 것입니다. 그러나'printf'는 표준 POSIX 쉘 명령이라고 생각하지 않습니다. 아마도'echo'가 사용되는 이유 일 것입니다. ('-n' 옵션이 표준인지 확실하지 않지만, 생각하지 않습니다.). –

1

당신이 보여준 Makefile [예시]은 main.d이 어떻게 생성되었는지 보여주지는 않지만 실제로는 Makefile에 포함되어있는 것 같습니다. 이는 아마도 main.cpp이지만make` 구문의 종속성을 포함하기위한 것입니다. 지금 당장 파일을 제거해보십시오. 재생성이되면 생성 방법을 찾아 수정해야합니다. 이 mkerr은 사용 규칙을 포함하여 make 명령의 출력을 포함, 파일을 제거하고이 완료되면

make -p 2>&1 | tee mkerr 

을 사용하여 다시 생성하는 방법을 참조하십시오. 어딘가에 .d 파일을 빌드하는 규칙이 있습니다.

%.d: %.cpp 
    @echo -n $(dir $<) > [email protected] 
    @$(DEPEND.d) $< << [email protected] 

문제가 있다는 것입니다 : 약간의 운이 파일을 제거하여 문제를 정렬로 ... pastebin 문제에 게시 된 코드를 기반으로

%.d 파일을 만드는 방법의 규칙은 발견 된 echo은 개행을 피하기위한 것 인 -n 옵션을 이해하지 못합니다. 규칙의 첫 번째 행은 파일의 디렉토리 접두어를 추가해야합니다. 해결 방법은 -n 옵션을 이해하는 더 나은 echo을 찾는 것입니다. echo은 내장 쉘인 경향이 있기 때문에 다른 쉘을 사용해야 할 수도 있습니다! 이 경우 오작동하지 않는 버전으로 echo의 전체 경로를 사용하는 것이 가장 좋습니다.

+0

나는'.d' 파일을 제거하고'make'를 다시 실행했지만 여전히 그것을 다시 생성합니다. 전체 파일보기 [여기] (http://pastebin.com/fqXxDesJ). – Shoe

+0

@Jeffrey : 완전한 규칙 세트를보기 위해'-p' 옵션으로 실행 했습니까? –

+0

'make -p'를 실행 해 보았는데 makefile을 출력합니다. '-n. /'으로 무엇을하려합니까? '-n' 플래그는 무엇을 의미합니까? (I는 ([시도] http://www.google.it/#hl=it&gs_nf=3&qe=LW4gZmxhZyBtYWtlZmlsZQ&qesig=uTjr2lI3792UCBsMoSjm4w&pkc=AFgZ2tmFXf6nSo26tlvpJYJnXI9bs3B1jRth0p83G1N91Cq_0m0Wb7Aib28tARcz3WPTC0w01iJutlEyqHChVAaCnRy786QRtQ&pq=gcc%20flags&cp=16&gs_id=5g&xhr=t&q=-n+flag+makefile&pf=p&tbo=d&sclient= & fp = 70759a6a8974c64e & bpcl = 38897761 & biw = 1279 & bih = 680) 그리고 [시도한] (http : // tigcc.info, psy-ab & oq = -n + 플래그 + makefile & gs_l = & pbx = 1 & bav = on.2 또는 .r_gc.r_pw.r_cp.r_qf. tictc.org/doc/comopts.html) googling) – Shoe

관련 문제