2014-05-15 2 views
0

필자가 수정해야 할 작업 코드가 주어졌지만 아래 제공된 제공된 makefile을 사용하여 실제로 프로그램을 컴파일 할 수는 없습니다.Makefile 컴파일 오류가 적용되지 않습니다. -std = c99

INCLUDE_PATH = -I/usr/X11/include -I$(BLDR_FREEGLUT_INCLUDE_PATH) 
LIBRARY_PATH = -L/usr/X11/lib -L$(BLDR_FREEGLUT_LIB_PATH) 
CCFLAGS = -std=c99 
LDFLAGS = -lGL -lGLU -lglut -lX11 -lpthread 

GCC = gcc 
APP = nbody 

all: $(APP) 
    @echo Make done 

clean: 
    @rm -f *.o $(APP) 

nbody: nbody.c 
    $(GCC) nbody.c -o nbody $(INCLUDE_PATH) $(CCFLAGS) $(LIBRARY_PATH) $(LDFLAGS) 

make 명령의 첫 번째 출력 행은 다음과 같습니다. 그러나 그 아래

gcc nbody.c -o nbody -I/usr/X11/include -I -std=c99 -L/usr/X11/lib -L -lGL -lGLU -lglut -lX11 -lpthread 

는 C99에 대한 플래그가 제대로 지정 될 것으로 보인다 이후 이해하지 않는, 어떤 일 만있다 "C99 모드에서 허용"라고 말하는 오류가 있습니다. 이 문제를 해결하기 위해 $ (CCFLAGS) 값의 위치를 ​​변경하지 않고 시도했습니다.

이 메이크 파일을 수정하여 프로그램이 준수하도록하려면 어떻게해야합니까?

답변

1

-I -std=c99은 검색 경로를 포함하도록 -std=c99 디렉토리를 추가하도록 컴파일러에 말합니다. 이것은 당신이 원하는 것이 아닙니다. 제시된 단편으로 판단하면 $(BLDR_FREEGLUT_INCLUDE_PATH)은 비어 있지만 그렇지 않아야합니다. 변수의 값을 수정하면 모든 것이 잘됩니다.

+0

반드시 그렇지는 않습니다. 그것은 셸 변수를 내보낼 수 있지만 그것은 또한 내부 변수가 메이크 파일에 정의 된 수 있습니다. 그러나, 당신이 그것을 사용했던 방식으로, 그것은 공백으로 남겨 둘 수 없습니다. 왜냐하면 다음의 인수가 dirname이 될 것으로 기대하는 닫히지 않은'-I'를 생성하기 때문입니다. – keltar

관련 문제