문제

AVR 마이크로 컨트롤러 및 AVR-ADA와 함께 사용하기 위해 GCC를 구축하려고 노력하고 있으며 AVR에 필요한 버전에 대해 일반 컴파일러가 너무 까다로워서 발생하는로드 블록을 쳤습니다. 다음 경고를 받으면 GCC가 발생하거나 오류를보고합니다.

gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada 
  -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2

GCC를 지시하거나 경고에 실패하지 않도록하는 방법이 있습니까?

도움이 되었습니까?

해결책

여기서 트리거는 -GNATPG (실제로 -GNATG)입니다. 이것은 "GNAT 구현 모드 (GNAT 장치 컴파일에 사용)입니다. -GNATP는 "모든 수표 억제"를 의미합니다.

나는 -GNATG의 전체 효과를 확신하지 못하지만, 컴파일러 자체를 구축하는 동안 어떤 속도로나 경고가 -werror와 같은 오류로 취급되는 것을 확실히 유발합니다. RT를 구축하는 동안 치명적이지 않은 경고를 본 것을 기억합니다.

하나의 가능성은 -GNATG없이 exp_ch5.adb 만 직접 컴파일하는 것입니다. 귀하가 목록에있는 명령은 GCC/에서 발행되었습니다.

$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada \
  ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o

그런 다음 한 레벨을 백업 한 다음 다시 '만듭니다'.

이것은 크로스 컴파일러이므로 전체 빌드의 세 단계 모두에 대해 이것을 반복 할 필요가 없습니다.

다른 팁

노력하다 make -k 그냥 대신 make. 그것은 멈추기보다는 '계속'됩니다.

빌드 시스템으로 다이빙하는 대안으로 설정하십시오. -Wno-error CFLAGS에서는 환경을 통해 수행 할 수 있어야합니다 (또는 GNU 빌드 시스템을 사용하는 경우 시간 구성).

-werror 플래그는 makefile에 설정된 것 같습니다. 아마도 makefile에서 cflags 옵션을 찾고 -werror 플래그를 제거 할 수 있습니다. Werror 플래그는 모든 경고를 오류로 만듭니다.

일반적으로 컴파일러의 경고를 무시하는 것은 좋은 생각이 아닙니다. 그러나 이것이 더 큰 메이크 프로세스의 일부라면 -Werror 순서에 앞서 삽입 된 플래그. 그것을 찾아서 시작하십시오.

주위를 둘러 보면 ADA 코드를 컴파일하는 동안 경고를 제어 할 수있는 풍부한 깃발이있는 것 같습니다. 예를 들어, -gnatwF ~ 할 것이다 참조되지 않은 공식에 대한 경고를 억제하십시오 ~에 따르면 이 안내서. 아마도 필요한 스위치는 거기에 제공된 목록에서 찾을 수 있습니다.

GCC 구성에서 추가 할 수 있습니다 --disable-werror.

먼저 적절한 패치를 찾는 것이 좋습니다.

코드의 불쾌한 부분에 "Pragma 경고 (Off,"... ")를 넣는 것은 어떻습니까?

보다 http://www.adacore.com/2007/11/19/ada-gem-18/.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top