2012-11-10 2 views
2

내 메이크 파일은 다음과 같습니다gcc는 -o와 함께 빌드되지만 -o3은 빌드하지 않습니까?

CC=gcc 
CFLAGS=-Wall -Wextra -std=c99 -pedantic 
OBJECTS=main.o Scene.o Matrix.o Vector.o Triangle.o Color.o Raster.o 

render: $(OBJECTS) 
    $(CC) $(CFLAGS) -lm -o render -g $(OBJECTS) 
    rm $(OBJECTS) 

clean: 
    rm -f render* 

이 오류없이 내 실행 파일을 구축,하지만 -O2 또는 -O3에 -o를 변경할 때, 나는 오류 얻을 :

gcc -Wall -Wextra -std=c99 -pedantic -c -o main.o main.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Scene.o Scene.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Matrix.o Matrix.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Vector.o Vector.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Triangle.o Triangle.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Color.o Color.c 
gcc -Wall -Wextra -std=c99 -pedantic -c -o Raster.o Raster.c 
gcc -Wall -Wextra -std=c99 -pedantic -lm -o3 render -g main.o Scene.o Matrix.o Vector.o Triangle.o Color.o Raster.o 
gcc.exe: error: render: No such file or directory 
make: *** [render] Error 1 

이이 수를 최적화 코드에 의해 감지 된 코드에 오류가있을 수 있지만, 오류 메시지가 나타나기 전에 어떤 오류가 발생하는지 알기가 어렵습니다. Windows 7에서 MinGW/MSYS를 사용하고 있습니다.

+3

옵티 마이저 설정을위한'-O' (대문자). – Mat

답변

7

-o renderrender이라는 출력 파일을 만드는 것을 의미합니다.

이제 -o-o3으로 변경하는 것이 잘못되었습니다. 대신 -o render을 그대로두고 최적화를 위해 -O3 플래그를 추가해야합니다. 대문자 O에 유의하십시오.

+0

사실, 최적화하지 않고 컴파일 된 시간 최적화 객체를 링크하는 것은 거의 무의미합니다 (-o name은 -c name.c와 같은 일을합니다). 실제 최적화를 원하면 -o name을 -O2 또는 -Os 또는 -O3으로 바꿉니다. 경험 많은 Windows 사용자를 감추고있는 case insensitivity의 또 다른 예입니다 ... btw C는 대소 문자를 구분합니다. (내 이름은 대소 문자를 구분하지 않습니다. ;))) – technosaurus

4

-o은 출력 파일 플래그입니다. -O (capital)을 생각하고있었습니다.

+0

글쎄 그건 당황 스럽네. 내 마음이 완전히 미끄러졌습니다. 감사! – dst2

관련 문제