2012-12-13 10 views
6

Jeśli plik RC zostanie zmodyfikowany, Delphi skompiluje go ponownie. Jeśli plik RC ma deklaracje RCDATA lub BITMAP, które odwołują się do plików, które zostały zmienione, Delphi nie przekompiluje ponownie pliku .RC do .RES, dopóki nie wymuszam tego przez usunięcie pliku .RES lub wykonanie "dotyku" (zmodyfikuj plik sygnaturę czasową) na najwyższym pliku .RC.Sprawdzanie zależności plików RC w Delphi

Oto przykładowy plik TEST.RC:

SAMPLE RCDATA "File.txt" 

Kiedy TEST.RC jest modyfikowany, że spowoduje kompilację, kiedy „plik.txt” jest zmodyfikowany, jednak Delphi nie skompilować zasobów, na "Kompilacja". Nie chcę używać "Build", ponieważ zwiększa to mój czas z kilku sekund do kilku minut.

Czy ktoś kiedykolwiek uzyskał Delphi do poprawnego działania z plikami tekstowymi .RC i zależnościami? Niektórzy ludzie dodają zasoby i nigdy ich nie zmieniają, ale zacząłem używać plików .RC do rzeczy, które często mogę zmienić, takich jak dane binarne lub tekstowe, które znajdują się w sekcjach RCDATA w pliku .RC.

Należy zauważyć, że próba wprowadzenia kroku "usuń .res" w wersji wstępnej lub późniejszej wydaje się przerwać IDE/kompilator Delphi. Mogę to rozwiązać zewnętrznie podczas budowania poza IDE (zawsze usuwam pewne pliki .res przed uruchomieniem msbuild), ale wewnątrz IDE, Delphi nie daje mi dużego wyboru.

Czy ktoś ma rozwiązanie? (Mam problem z Delphi 2007, ale każde rozwiązanie współpracujące z dowolną wersją Delphi od 2007 do XE3 byłoby mile widziane.)

+0

czy próbowałeś wywołać interpretera wiersza poleceń? coś takiego jak cmd.exe/c "del * .res" – jachguate

+1

Zawsze kompiluję zasoby w skrypcie pre build –

+1

'del' nie działa (myli kompilator IDE delphi), ale' touch foo.rc' w pre -build działa. Przypuszczam, że wykonanie polecenia "rc.exe" w wersji wstępnej również byłoby idealne. –

Odpowiedz

2

To nie jest dokładnie idealna odpowiedź, ponieważ nie jest wykonywane sprawdzanie zależności przez poniżej próbki, jednak podstawowy problem braku wystarczającej odbudowy zasobów jest ustalany przez Zawsze odbudowujące za każdym razem, co jest wystarczająco dobre.

To na koniec jest bardziej poprawne niż zachowanie wbudowane Delphi, które różni się od (a) nierekompilowania wystarczająco często podczas kompilacji z deklaracji {$ R foo.res foo.rc}, gdy używasz jej wewnątrz IDE do jeszcze gorszy stan (b) nie budowania w ogóle z linii poleceń, jeśli umieścisz deklarację {$ R foo.res foo.rc} w pliku .dpr.

Tak, z tym wszystkim, oto pracy krok pre-build, który robi to, co David zasugerował zrobić:

call $(PROJECTDIR)\SubDir\foo.cmd $(PROJECTDIR) 

oto co moim foo.cmd zawiera:

cd %1\SubDir 
    rc.exe foo.rc 
    echo compiled foo RCDATA 

Dla każdego zastanawiając się, co może foo.rc go zawierać może wyglądać następująco:

SQL_QUERY_1 RCDATA "SqlDir1\MYSQL.SQL" 

ERRATA:

Znalazłem, że {$R foo.res foo.rc} buduje się poprawnie tylko w Delphi 2007 z poziomu IDE. Z wiersza poleceń MSBUILD nie będzie budowany. Po prostu otrzymujesz komunikat "DCC ERROR 1" , a kompilacja przerwie się bez prawdziwego komunikatu o błędzie. Być może zechcesz wiedzieć, że jednym z powodów, dla których kompilacja delphi MSBUILD w tajemniczy sposób przerabia się bez żadnego błędu w dzienniku błędów lub na stdout, jest gdy RC.exe zwraca poziom błędu. RC.exe wyświetla prawdziwy komunikat o błędzie (Hey Delphi wysłałeś mi nieprawidłowe parametry wiersza poleceń, poddaję się) i albo Delphi DCC32 nie przekazuje tego z powrotem do ciebie, albo jest w jakiś sposób inaczej pożerana i nie dana z powrotem do użytkowników, aby mogli mieć wystarczająco dużo informacji, aby wiedzieć, dlaczego ich budowanie w tajemniczy sposób się psuje. Paskudna mała integracja msbuild-dcc32 z powodu niewłaściwej funkcji.

Zamiast {$ R podkatalog \ foo.res podkatalog \ foo.rc}, trzeba mieć to w swojej DPR:

{$R SubDir\foo.res} 

To znaczy „link, który zasób binarny i nie starają się skompilować , ponieważ już to zrobiliśmy ". Wszystkie powyższe są po prostu wyraźne, co David zasugerował w komentarzu. Końcówka kapelusza do Davida.

+0

+1 dla informacji o ERRATA –

Powiązane problemy