P1.dproj
과 P2.dproj
의 두 패키지를 만들었습니다.컴파일러가 현재 패키지에 속하지 않는 DCU를 유닛 출력 디렉토리에 두는 이유는 무엇입니까?
P1
이 Unit1.pas
이고 P2
이 Unit2.pas
인 패키지에 두 개의 빈 단위를 넣었습니다.
각 패키지의 단위 출력 디렉토리를 .\P1\$(Platform)\$(Config)
및 .\P2\$(Platform)\$(Config)
으로 편집했습니다.
P2 프로젝트에 대한 참조로 P1을 추가하여 P2가 P1에 종속되도록했습니다.
프로젝트 파일은 같은 폴더에 저장됩니다.
디렉토리 구조는 다음과 같다 : I 종속성 P1은 Packages\P1\Win32\Debug\Unit1.dcu
를 출력하고, P2는 Packages\P21\Win32\Debug\Unit2.dcu
출력 된 추가
Root\
Source\
P1\
Unit1.pas
P2\
Unit2.pas
Packages\
P1.dpk
P1.dproj
P2.dpk
P2.dproj
P1\
Win32\
Debug\
P2\
Win32\
Debug\
전에.
예기치 않은 결과가 없습니다.
P2를 빌드 할 때 종속성을 추가하면 IDE에서 자동으로 P1도 컴파일되지만 파일은 이제 Packages\P2\Win32\Debug\Unit1.dcu
에 출력됩니다.
왜 그럴까요?
Unit1.dcu
파일이 P2.droj
의 Contains
목록에 없으며 어떤 라이브러리 경로 또는 찾아보기 경로에도 나열되어 있지 않습니다 (Delphi는 아니며 프로젝트 로컬도 아닙니다).
컴파일러가 현재 프로젝트의 단위 출력 디렉토리에 원본 디렉토리에 대한 액세스 권한이없는 이유는 무엇입니까?
P1 dpk/dproj 파일을 일부 하위 폴더로 옮기고 IDE를 다시 시작하면 올바르게 P1.dcp
파일을 찾을 수없고 P1에서 컴파일을 시작하지 않는다고 불평 할 것입니다.
나는 더 큰, 더 복잡한 설정에서이 동작을 발견했다 그리고 ... 나를 미치게했다
베를린과 중복 할 수 없습니다. 그룹에 새 프로젝트를 추가하고 종속성을 추가했습니다. 두 프로젝트 모두에 대해 컴파일되고 컴파일 된 DCU는 정확한 위치에 저장됩니다. – FredS
특히 프로젝트는'packages'이어야하며 한 패키지에서 다른 패키지로 참조를 생성해야합니다 (프로젝트 그룹의 depedency 빌드가 아님). –
@ JensMühlenhoff - P1의 Project Options에서 "Build Control"설정을 사용하여이를 제어 할 수 있습니다. 기본값은 "필요할 때 다시 빌드"입니다. "Explicit rebuild"로 변경하면이 동작을 방지 할 수 있습니다. (방금이 답변을 업데이트했습니다) –