2013-03-15 4 views
7

나는 큰 유닛에서 일하고 있는데, 유닛이 너무 커서 3 유닛으로 나누기로 결정했다. 단위 이름이 Main, CommonObjects 인 경우를 가정 해 보겠습니다. Main 단위는 다른 두 단위를 모두 사용하며 Objects 단위는 Common 단위를 사용합니다. 이 조건부를 참조해야하는 모든 세 가지 단위의 코드가 있습니다.유닛에 조건을 정의하고 다른 유닛에서 사용할 수 있습니까?

문제는이 조건부를 3 단위 중 어떤 단위로 정의했는지에 관계없이 다른 2 단위는 해당 단위를 볼 수 없다는 점입니다. 나는 확실히 3 개의 단위 전부에서 그 (것)들을 베끼고 싶지 않다. 또한이 프로젝트는 여러 프로젝트에서 사용되기 때문에 프로젝트에서 정의하고 싶지 않습니다.이 경우이 프로젝트를 사용하는 모든 프로젝트가 조건부를 신경 쓰지 않아야합니다.

프로젝트에서이 조건문을 정의하지 않고 3 개의 모든 단위에서 볼 수있는 조건을 정의 할 수 있습니까?

+3

포함 파일을 사용할 수 있습니다. – TLama

+0

+1. 나는 프로젝트 파일에 그것들을 넣는 것에 대한 이의를 이해하지 못한다. 그곳에 있으면 프로젝트 파일의 정의가 프로젝트에만 적용되기 때문에 유닛을 사용하는 다른 프로젝트에는 영향을 미치지 않습니다 (단위를 사용하고 컴파일 된 .dcu 파일을 사용하지 않는 한). 정의가 적용됩니다. 단위를 사용하는 다른 프로젝트는 정의에 대해 아무 것도 모르고, 단위에 영향을 미치지 않으면 서 단위를 컴파일합니다. 그러나 다른 프로젝트가 컴파일하기 전에 포함 파일을 적절하게 변경하지 않는 한, 파일을 포함 파일에 넣는 것이 좋습니다. –

+0

@Ken 프로젝트가이 단위를 사용하고 있더라도 모든 프로젝트는 동일한 조건을 가정해야하므로 걱정할 필요가 없습니다. 예를 들어, 10 개의 다른 프로젝트는 아마도 동일한 정확한 조건을 필요로 할 것입니다. 또한 정의 할 필요가있는 12 가지 조건이 있습니다. 최종 조건 개발자가 이러한 조건이 존재하는지 알지 못할 때 프로젝트의 12 가지를 모두 정의 할 것이라고 기대하지 않습니다. –

답변

8

조건부 정의에 대한 유일한 옵션은 .inc 파일에 넣고 3 단위 모두에 포함시키는 것입니다.

그러나 조건부 정의 및 $IFDEF이 조건부 컴파일을 수행하는 유일한 방법은 아닙니다. 조건 대신 부울 상수를 사용하는 것을 고려할 수 있습니다. 3 단위 모두에서 볼 수있는 한 $IFDEF 대신 $IF을 사용할 수 있습니다.

{$IF MyConstant} 
    .... 
{$IFEND} 

또는 XE3에서 시작, 당신은 {$ENDIF}{$IF}을 종료 할 수 있습니다.

개인적으로 나는 조건 적으로 컴파일하려고 할 때이 후자의 접근법을 선호하는 경향이 있으며 조건이 전역 범위를 가지기를 원하지 않습니다.

+0

이런 소리가 참으로 유일한 해결책입니다. 감사합니다! –

+0

나는'{$ IF MyConstant} '접근법을 좋아한다. 'MyConstant '에 대해 당신은 무엇을 사용하는 경향이 있습니까? Btw, 귀하의 조건에 글로벌 범위가 필요한 이유는 무엇입니까? 다시 말해, 조건부 컴파일을 사용하는 것에 관심이 있습니다.나는 현재 모든 경로에서 "조건 없음"상태에 있으며, 이전 버전의 소프트웨어에 대한 컴파일러 버전 호환성을 보장하지 않습니다. –

+0

@MarjanVenema 일반적으로 성능 문제로 인해 표준 빌드로 컴파일 할 수없는 진단/디버깅 코드 용입니다. 알다시피, 프로젝트 파일에 간섭하지 않는 것이 좋으며, 소스 코드의 로컬 변경은 덜 불투명합니다. –