2013-10-15 2 views
5

Я успешно зарегистрировал уведомление IDE (IOTAIDENotifier80), поэтому получаю уведомления AfterCompile.Как отличить компиляцию и сборку с D2007?

Можно ли определить, был ли проект построен или просто скомпилирован/изготовлен?

Я нашел this answer о внедрении IOTAProjectCompileNotifier, но это невозможно в D2007.

Любой другой способ? Я был бы в порядке с недокументированным способом, поскольку это только для эксперта в доме.

Обновление: Мне нужно это, чтобы воспроизвести функцию «AutoInc build number» с внешним .rc-файлом, содержащим информационный ресурс версии. Может быть, это можно сделать через BuildEvents? Хотя мне нравится возможность регистрировать сообщение в среде IDE с обновленным номером версии ...

+0

FWIW, я думаю, что интерфейс «IOTACompileNotifier» и был добавлен в D2010. Если есть недокументированный способ, это он. Возможно, интерфейс, который вам нужен для регистрации уведомителя 'IOTACompileServices', реализуется D2007, но просто не опубликован в D2007 ToolsAPI.pas. Стоит идти. Это GUID - '{68C486EF-C079-4D40-B462-2C0DD21FE342}'. Если нет, вы можете установить код для перехвата события, которое вызывает make/build. Это сложно, потому что вам нужно будет установить батут, и вам понадобится приличная библиотека для подключения. –

+0

К сожалению, не повезло. Я скопировал объявление IOTACompileServices в свое подразделение, но сброс 'BorlandIDEServices как IOTACompileServices' завершился неудачно. – msohn

+0

У меня была надежда, что для этого есть «старый способ», который все равно будет поддерживаться в D2007. – msohn

ответ

1

Я понятия не имею, как писать экспертов или подключаться к IDE, и я боюсь батутов. Сказав это, я заметил, что вы можете сказать разницу между компиляцией и сборкой, отслеживая временные метки файлов в выходной папке проекта, но это отличие очевидно только в том случае, если код (* .pas или * .dfm) изменилось с момента последнего компиляции или сборки. Другими словами, когда происходит смена кода, вы не можете сказать разницу, отслеживая отметки времени. Однако при отсутствии изменения кода с момента последнего компиляции или сборки компиляция изменит только временную метку exe (временные метки dcu не будут изменены).

Таким образом, при отсутствии других более элегантных решений, и только если вы действительно отчаянно нуждаетесь в этой информации (т. Е. Была ли она скомпилирована или была построена?), Тогда я могу предложить вам решение из 2 частей.

Часть 1. Запись процесс мониторинга изменений в временных меток в папке вывода, и

Часть 2. Расскажите вашим коллегам разработчиков, что существует ошибка в D2007, которая усложняет процесс сборки, но эта ошибка легко преодолевать, просто компилируя дважды или строя дважды (или если вы знаете, как автоматизировать это, тогда идите для своей жизни). Если вы можете заставить разработчиков скомпилировать два раза или дважды выполнить сборку, то после второго компиляции или сборки вы сможете определить, была ли она компиляцией или сборкой, тестируя, изменилась ли временная метка dcu на второй компиляции или сборку.

Теперь я пойду и встану в непослушном углу и спрошу себя: «Почему я?». Приветствия.

+1

Спасибо за интересный ответ. Я буду помнить об этом, хотя это будет довольно немного работы, учитывая, что вам нужно будет получить выходную папку из конфигурации проекта, и она должна работать для разных типов выходных файлов (dll/bpl/exe). – msohn