2010-06-23 2 views
1

소스 나 사용 된 유닛, 패키지 등이 변경된 경우에만 델파이 프로젝트를 컴파일 할 수있는 옵션이 있는지 알아야합니다.델피 조건부 컴파일

두 번째 대안 : 동일한 프로젝트를 두 번 컴파일하는 것과 동일한 이진을 생성하는 옵션이 있습니까?

감사합니다.

편집 : 사용법은 해시 기반 WebUpdate입니다.

+1

저는 빌드하지 않는 한 델파이가 변경되지 않은 단위를 컴파일하지 않는다고 확신합니다. –

+0

그러나 다른 해시를 생성합니다. 그것은 타임 스탬프 또는 다른 것일 수 있습니다 ...하지만 바이너리는 항상 다릅니다. –

+0

버전 정보를 보면, Delphi 2010은 CompileDate를 exe (시간 포함)에 넣는 것으로 보입니다. 하지만 왜 같은 exe를 두 번 만들고 싶습니까? 그리고 Jens Björnhager가 맞다고 말할 수 있습니다. 델파이는 변경되지 않은 단위를 컴파일하지 않습니다. (다른 프로젝트에 대해 서로 다른 조건부 정의를 사용할 때 이것에 물릴 수 있습니다). –

답변

0

델파이는 컴파일 된 유닛 만 컴파일하고 빌드의 변경 상태에 관계없이 모든 유닛을 컴파일합니다.

Exe는 이진 수준에서 절대로 동일하지 않습니다. 단지 두 번 프로젝트를 만들었고 exe의 이름을 txt 확장자로 변경하고 Beyond Compare와 비교해 보았습니다. 차이점을 보여줍니다.

+0

PE 헤더에 각 컴파일마다 다른 타임 스탬프와 Cheksum이 있습니다. –

+0

네,하지만 그 차이는 그보다 훨씬 더 광범위합니다. 실제로 매우 광범위하게 ... –

+0

그냥 다시 비교를 확인했습니다. 대부분의 차이점은 두 가지 exe의 차이점과 동일합니다. http://www.bjmsoftware.com/delphistuff/exe_comparison.jpg를 참조하십시오. –

2

델파이 "컴파일"은 변경된 단위 만 컴파일합니다. 그러나 유닛은 데이터를 가지고 있으므로 컴파일러는 업데이트가 필요한지 확인해야합니다. 빌드 프로세스가 exe를 재배치 할 수 있기 때문에 실행 파일이 변경 될 수 있습니다. 웹 업데이트는 파일 해시를 사용해서는 안되며 업데이트 할 내용과 그렇지 않은 내용을 결정하기 위해 버전 정보를 사용해야합니다. 이것이 설치 관리자가 어떤 파일을 교체해야하는지 확인하는 방법입니다.

+0

귀하의 aproach가 맞습니다,하지만 나는 좀 더 일반적인 것을 시도하고 있습니다. –

+1

해쉬는 파일이 다르거 나 그렇지 않은 경우에만 알려주며, 오래된 것이거나 새로운 파일은 아닙니다. 이것이 버전 정보가 추가 된 이유 중 하나입니다. –

+0

@ 아이 단돈 : 파일이 동일한 경우 - 누가 최신인지 나이가 들지? 외부 파일 속성을 통해 말할 수 있습니다. 버전 정보의 문제점은 수동 또는 자동으로 변경해야 효과적이라는 것입니다. 자동 타임 스탬프 변경에 대한 재정의가 없다는 사실이 아니라면 해시/파일 비교보다 안전한 것은 없습니다. –

0

하나의 (하드) 솔루션 : Makefile을 사용하여 exe를 만드십시오! makefile을 사용하면 "이 exe는 해당 명령을 사용하여 해당 파일에서 생성됩니다"라고 말할 수 있습니다. make는 exe를 구성하는 파일 중 적어도 하나가 exe보다 새로운 경우에만 "해당 명령"을 실행합니다.

exe를 구성하는 파일 목록을 설정하는 것이 어렵습니다. DPR/DPROJ에 나열된 파일 목록을 쉽게 얻을 수 있지만 모든 링크 된 리소스를 식별해야합니다 (예 : $ R), 포함 된 모든 파일 ($ INCLUDE), 델파이에 의해 암시 적으로 컴파일 된 모든 파일은 "uses"절에서 사용되고 라이브러리 경로에 있습니다.

일반적인 경우를 위해 Makefile을 생성하는 것은 매우 어렵지만 특정 프로젝트의 경우 제대로 작동 할 수 있습니다. 예를 들어 파일이 DPR 파일에 나열된 파일에만 종속되어 있다고 생각한 다음 모든 관련 파일을 DPR에 추가했는지 확인하십시오.

관련 문제