MAKE 종속성 파일에 IBM XLC Template *.C 파일을 어떻게 포함합니까?

StackOverflow https://stackoverflow.com/questions/168938

  •  05-07-2019
  •  | 
  •  

문제

XLC 컴파일러의 경우 템플릿 코드가 *.c 파일로 이동합니다. 그런 다음 템플릿 함수를 사용하는 프로그램이 컴파일되면 컴파일러는 .c 파일에서 템플릿 정의를 찾아서 인스턴스화합니다.

문제는 이러한 .C 파일이 빌드 종속성을 생성하기 위해 XLC -QMAKEDENCER를 수행 할 때 기본적으로 포함되지 않는다는 것입니다. 따라서 .C 파일 중 하나를 변경하면 그에 따른 모든 것을 자동으로 빌드하지 않습니다.

이 문제에 대한 좋은 해결책을 찾은 사람이 있습니까?

도움이 되었습니까?

해결책

요컨대, 대답은 XLC의 Tempinc 유틸리티를 사용하여 마이그레이션하는 것입니다.

Tempinc 유틸리티는 헤더 (.h 또는 .hpp) 파일의 템플릿 선언과 .C 파일의 구현 (이 확장자가 필수)으로 파일을 설정해야합니다. 컴파일러가 템플릿 인스턴스화를 찾을 때, Tempinc 디렉토리의 다른 소스 파일에 명시적인 인스턴스화를 배치하여 코드가 생성됩니다. 컴파일러는 foo.c에서 foo.h에서 템플릿 정의가 떨어지는 것을 알고 있습니다.

내가 지정한 문제는 종속성 빌더가 이것에 대해 알지 못하므로 종속성에 .C 파일을 포함 할 수 없다는 것입니다.

버전 6.0 IBM은 -qtemplateregistry 설정을 사용하는 것이 좋습니다 -qtempinc보다는. 그런 다음 헤더 파일에 템플릿 정의를 포함하는 일반적인 템플릿을 사용하여 종속성 찾기에 표시되거나 헤더 파일에서 #Includ에서 #Includ가있는 별도의 파일에 넣을 수 있습니다. 종속성 파인더를 사용하여 발견되었습니다.

-qtempinc 사용에서 마이그레이션하는 경우 아래와 같은 코드와 함께 선언 파일에서 템플릿 구현 파일을 조건부로 #INCLUDED를 포함시킬 수 있습니다.

// end of foo.h
#ifndef __TEMPINC__          
#include "foo.c"       
#endif       

따라서 -qtempic 설정을 사용하기로 결정한 경우 코드가 빌드 및 링크됩니다.

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