2008-10-03 5 views
0

XLC 컴파일러의 경우 템플릿 코드는 * .c 파일에 저장됩니다. 그런 다음 템플릿 함수를 사용하는 프로그램을 컴파일하면 컴파일러는 .c 파일에서 템플릿 정의를 찾아 인스턴스화합니다.make dependency 파일에 IBM XLC 템플릿 * .c 파일을 포함시키는 방법은 무엇입니까?

문제는 빌드 종속성을 생성하기 위해 xlC -qmakedepend를 수행 할 때 이러한 .c 파일이 기본적으로 포함되어 있지 않습니다. 따라서 .c 파일 중 하나를 변경하면 자동으로 의존하는 모든 것을 빌드하지 않습니다.

누구든지이 문제에 대한 좋은 해결책을 찾았습니까?

+0

(내 답변 삭제 - JohnMcG의 .c 파일이 어디서 왔는지 오해했습니다.) –

답변

1

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

tempinc 유틸리티는 헤더 파일 (.h 또는 .hpp)의 템플릿 선언과 .c 파일의 구현 (이 확장자는 필수 항목 임)으로 파일을 설정해야합니다. 컴파일러가 템플릿 인스턴스화를 발견하면 명시 적 인스턴스화를 tempinc 디렉토리의 다른 소스 파일에 지정하여 강제로 코드를 생성합니다. 컴파일러는 foo.c의 foo.h에서 declered 된 템플릿 정의를 찾는다.

내가 지정한 문제점은 종속성 빌더가이 사실을 알지 못하므로 의존성에 .c 파일을 포함 할 수 없다는 점입니다.

-qtempinc 대신 버전 6.0 IBM recommends using a the -qtemplateregistry setting을 사용하십시오. 그런 다음 헤더 파일에 템플릿 정의를 포함하는 일반적인 템플릿 설정을 사용할 수 있습니다. 템플릿 정의는 종속성 찾기에서 볼 수 있거나 헤더 파일에서 #include하는 별도의 파일에 넣을 수 있습니다. 종속성 찾기를 사용하여 찾았습니다.

당신이 -qtempinc 사용에서 마이그레이션하는 경우, 당신은 조건부로 아래와 같은 코드를 사용하여 선언 파일에서 템플릿 구현 파일을 #include를 할 수 있습니다 : 당신이 이제까지 결정하는 경우

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

따라서 코드를 빌드하고 링크합니다 -qtempic 설정을 사용하십시오.