2017-03-27 2 views
1

최근의 GCC 업데이트 이후에 우리는 프리 컴파일 된 공통 함수 중 일부가 재 컴파일되는 것을 발견했습니다. 그것은 gnat.adc 파일을 사용하여 pragma를 저장하는 것과 관련이있는 것으로 보입니다. 나는 해결 방법을 가지고 있지만, 꽤 아니며, 누군가 내가 잘못하고 있는지를 말할 수 있기를 바랬다.불필요한 Ada 의존성 재 컴파일 (GCC 5.3.0)

디렉토리 구조 :

~/adatest 
    -dependency 
     dependency.ads 
     dependency.adb 
     gnat.adc 
    -dependent 
     dependent.adb 
     gnat.adc 

파일 :

--dependency.ads 
package dependency is 
    procedure donothing; 
end dependency; 


--dependency.adb 
with ada.text_io; 
package body dependency is 
    procedure donothing is 
begin 
    ada.text_io.put_line("Doing nothing"); 
end; 
end dependency; 

--dependent.adb 
with dependency; 
procedure dependent is 
begin 
    dependency.donothing; 
end dependent; 

gnat.adc 파일이 모두 비어 있습니다.

컴파일 :

cd ~/adatest/dependency 
/usr/gnat/bin/gnatmake -m dependency.adb 
ls 
    dependency.adb dependency.ads dependency.ali dependency.o gnat.adc 
cd ../dependent/ 
/usr/gnat/bin/gnatmake -m dependent.adb -I../dependency 
ls 
    dependency.ali dependency.o dependent dependent.adb dependent.ali dependent.o gnat.adc 

그래서 의존성이 이미 컴파일 된 경우에도 의존 재 컴파일 의존성을 컴파일. gnatmake의 자세한 플래그를 사용하여, 내가 볼 수있는 이유 :

gcc -c -I../dependency dependent.adb 
    "~/adatest/dependency/dependency.ali" being checked ... 
    -> "gnat.adc" time stamp mismatch 

이 (종속 디렉토리의 gnat.adc의 타임 스탬프입니다) dependency.ali에 저장된 gnat.adc 타임 스탬프의 타임 스탬프와 비교되는 것 같습니다 종속 디렉토리의 gnat.adc, 불일치 및 재 컴파일의 원인. 두 gnat.adc 파일을 제거하면 재 컴파일이 중지되지만 실제 프로그램에서 해당 pragma가 필요합니다. 이전 GCC 버전 (4.8.2)에 gnat.adc 타임 스탬프가 저장되지 않았으므로이 문제가 발생하지 않았습니다.

어쨌든 현재 해결 방법은 모든 gnat.adc 파일의 이름을 gnat.adc.tmp로 변경 한 다음 gnatmake의 구성 파일 매개 변수 (-gnatec = gnat.adc.tmp)를 사용하여 파일을 지정하는 것입니다. .tmp 확장자는 .ali에서 파일 색인이 생성되지 않도록하여 문제를 해결합니다. 나는이 kludge를 정말 좋아하지 않으며 깨끗한 해결책이 있기를 바라고 있습니다.

+0

어떤 pragma가 파티션 전체와 그렇지 않은지주의해야합니다. –

답변

1

라이브러리 디렉토리를 지정하는 것처럼 보입니다. 디렉토리 dependent에서, 그리고 (아무것도하지 않고 실행할 때 gnatmake의 출력에 설명 된 것처럼)

$ gnatmake -m -A../dependency dependent.adb 

즉, -Adir를 사용하여 디렉토리 dependency에서 컴파일 후. 그런 다음,

$ ls 
dependent dependent.adb dependent.ali dependent.o gnat.adc