2012-11-15 4 views
0

내가 플렉스 사용하여 내 어휘 분석기를위한 메이크업 파일을 만들고 싶어, 나는 파일을 여러 템플릿을 시도했지만 그렇게 코드를 컴파일 할 날이 선을 여기에 하나를 구축입니다 도와주세요 작동하지 않았다 :어휘 분석기 용 makefile을 만드는 방법은 무엇입니까?

lex -t lexical.l > lexical.c 
cc -c -o lexical.o lexical.c 
cc -o lexy lexical.o -ll 
+0

어떤 오류가 있습니까? – iabdalkader

답변

2

출발점

LEX = lex 

.l.c: 
     $(LEX) -t $< >[email protected] 

.c.o: 
     $(CC) -o [email protected] -c $< 

lexy: lexical.o 
     $(CC) -o [email protected] $^ -ll 

이 등등 clean 규칙, 의존성 추적 및 확장 할 필요가있을 것입니다,하지만 난 당신이 생각하는 방법을 메이크 작업을 얻을 수 있어야한다고 생각합니다.

+0

위의 대답과의 차이점은 무엇입니까 – flashdisk

8

GNU make를 사용하는 경우 makefile을 전혀 필요로하지 않습니다. 기본 규칙은 사용 사례를 다룹니다.

기본 규칙을 인쇄하고 make가 '% .l'을 '% .c'로 변환하는 방법을 알고 있는지 확인하겠습니다.

$ make -p | grep -A6 '\.l\.c' 
make: *** No targets specified and no makefile found. Stop. 
.l.c: 
# Implicit rule search has not been done. 
# Modification time never checked. 
# File has not been updated. 
# recipe to execute (built-in): 
    @$(RM) [email protected] 
    $(LEX.l) $< > [email protected] 

있습니다. 비슷한 방법으로 GNU make가 '% .o'를 '% .c'에서 빌드하고 '%'를 '% .o'에서 빌드하는 방법을 알고 있는지 확인할 수 있습니다.

현재 디렉토리에 lexical.l이 있고 메이크 파일이 없다고 가정하면 빌드를 만드는 방법을 알 수 있습니다. lexical.

$ make -n lexical 
rm -f lexical.c 
lex -t lexical.l > lexical.c 
cc -c -o lexical.o lexical.c 
cc lexical.o -o lexical 
rm lexical.c lexical.o 

위대한. 우리가 놓칠 수없는 것은 귀하가 요청한 연결을위한 -ll 플래그입니다. LDLIBS에 추가해 보겠습니다.

$ make -n lexical LDLIBS=-ll 
rm -f lexical.c 
lex -t lexical.l > lexical.c 
cc -c -o lexical.o lexical.c 
cc lexical.o -ll -o lexical 
rm lexical.c lexical.o 

Voilà! 결과적으로 makefile은 다음과 같이 짧을 수 있습니다.

LDLIBS=-ll 
all: lexical 
+0

최종 작성 파일에 무엇이 있어야 하는지를 이해하지 못 했습니까? – flashdisk

+0

내 대답의 마지막 두 줄. – Jan

+0

make 명령을 실행할 때 다음과 같은 메시지가 표시됩니다. ~/hedor1> make make : *** 지정된 대상이없고 makefile을 찾을 수 없습니다. 중지. – flashdisk

2

GNU make가 이미 필요한 규칙을 정의했습니다. 그냥 Makefile

LDLIBS = -ll 

lexy: lexical.o 

lexical.o: lexical.l 

라는 이름의 파일이 넣어

은 $

make를 실행하면됩니다.

관련 문제