$(BDSCOMMONDIR) отличается при компиляции из FinalBuilder и IDE

Я занимаюсь обновлением Delphi XE3 до XE7 и заметил, что мой сценарий FinalBuilder больше не работает должным образом.

У меня есть различные проекты Delphi, настроенные для вывода файлов BPL/DCP в $(BDSCOMMONDIR)\*, для которого в качестве переменной системной среды задано значение C:\Users\Public\Documents\Embarcadero\Studio\15.0. Открытие проектов в среде IDE и компиляция работают должным образом, однако всякий раз, когда я компилирую с помощью FinalBuilder, файлы создаются в C:\Users\Public\Documents\RAD Studio\15.0, и я понятия не имею, почему, я искал везде и не вижу, где этот путь установлен, т.е.

  • (IDE) Инструменты -> Параметры -> Переменные среды
  • %APPDATA%\Embarcadero\BDS\15.0\environment.proj
  • Переменные среды FinalBuilder
  • Переменные системной среды

Во всех этих местах путь соответствует ожиданиям. Мое подозрение заключается в том, что XE3 и XE7 установлены на одном компьютере, просто потому, что для установки XE3 $(BDSCOMMONDIR) указывает на C:\Users\Public\Documents\RAD Studio\10.0 (разница только в версии продукта) . Поскольку в данный момент я только оцениваю XE7, я хотел бы попытаться избежать удаления XE3, если в этом нет крайней необходимости.

Примечание. Еще одно отличие заключается в том, что при установке XE7 я выбрал установку Delphi, а не RAD Studio, которую использовал ранее при установке XE3 (мне не нужен C++ Builder).

Кто-нибудь знает, почему это происходит?


person James    schedule 16.09.2014    source источник
comment
Как вы указываете в FinalBuilder, что вы хотите, чтобы он собирался с определенной версией Delphi? Конечно, получив эту информацию, он позаботится о настройке соответствующей среды. Мне также интересно, почему вы определили переменную среды BDSCOMMONDIR в системных переменных среды.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan в FinalBuilder есть опция для каждого отдельного действия компиляции, которая позволяет вам установить, какую версию Delphi вы хотите использовать, она отлично работает для XE3 (интересно, может ли это быть ошибкой FinalBuilder?). У меня был BDSCOMMONDIR в моих собственных переменных пользовательской среды, но его изменение, похоже, не имело никакого значения, поэтому я попробовал его в системе (хотя та же проблема). Кроме того, как ни странно, изменение значения для BDSCOMMONDIR в файле environment.proj не повлияло на файл Tools -> Environment Options (не знаю, откуда взяты эти значения).   -  person James    schedule 16.09.2014
comment
Я не понимаю, почему вы устанавливаете BDSCOMMONDIR env vars где угодно. Это просто не твоя работа. Вы должны раскрутить все это. Изменение environment.proj — еще один плохой ход. Зачем ты все это делаешь?   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan Извините, думаю, я запутался там ... Я установил BDSCOMMONDIR в переменных среды пользователя / системы, чтобы FinalBuilder мог их подобрать, причина этого в том, что есть некоторые предварительно скомпилированные файлы BPL / DCP, которые мы просто нужно вручную копировать. Однако, оглядываясь назад, вероятно, в FinalBuilder есть лучший способ сделать это (возможно, я могу загрузить переменные среды из Delphi IDE).   -  person James    schedule 16.09.2014
comment
Я бы начал с отмены всех изменений в переменных среды и возврата всех параметров IDE в их исходное состояние, а также восстановления любых измененных файлов environnent.proj и т. д. В основном отменить все возни, которые вы сделали. Затем подумайте, как заставить FinalBuilder использовать соответствующую среду при сборке. Позволяет ли FinalBuilder настроить среду, вызвав rsvars.bat? И он собирается с помощью msbuild?   -  person David Heffernan    schedule 16.09.2014
comment
Итак, я удалил экземпляр BDSCOMMONDIR из моих пользовательских/системных переменных среды и отменил изменения в файле environment.proj. Так что в моем сценарии FB я больше не могу ссылаться на переменную BDSCOMMONDIR (что имеет смысл). Если я перейду к параметрам компилятора в FB, я могу указать ему загружать переменные из конкретной версии Delphi при запуске (который, как я полагаю, использует rsvars.bat), однако после этого появляется только загрузка User overrides из Delphi и ни один из системных.   -  person James    schedule 16.09.2014
comment
Да, я понятия не имею о FinalBuilder. Никогда не использовал его. Я пишу сценарии для всех своих сборок. Я предполагаю, что документы говорят, как получить задачи сборки FB для настройки среды сборки.   -  person David Heffernan    schedule 16.09.2014
comment
Да, не беспокойтесь, я прочитал документы, и, по-видимому, именно так это и должно быть сделано, но явно происходит что-то смешное, поскольку он не загружает системные. Я могу обойти это, добавив переопределение с тем же значением, но было бы хорошо понять, почему другие не загружаются. Однако, даже если я это выясню, решит ли это проблему? Все мои действия компиляции настроены на загрузку настроек из проектов Delphi, FB ничего не передает компилятору, поэтому это не объясняет, почему BDSCOMMONDIR кажется измененным при сборке в IDE по сравнению с FinalBuilder. .   -  person James    schedule 16.09.2014
comment
Нет, я не утверждаю, что это решит вашу проблему. Но я думаю, что важно привести вашу машину в чистое состояние, чтобы провести расследование. Но что-то должно установить env vars для сборки. Вы не хотите, чтобы они устанавливались глобально ни в системных, ни в пользовательских переменных. Вы хотите, чтобы процесс сборки установил их. IDE организует это. ФБ явно нужно как-то это сделать. Один из вариантов — использовать rsvars.bat. Но я понятия не имею, как это делается.   -  person David Heffernan    schedule 16.09.2014
comment
Нет, не делай этого! На моей машине установлены миллионы версий Delphi. Главное — убедиться, что глобальная среда вообще ничего о них не знает. Только при выполнении конкретных задач вы настраиваете локальную среду с необходимыми переменными.   -  person David Heffernan    schedule 16.09.2014
comment
Прочитайте это: finalbuilder.com/support/forums/aft/10336 Вы этот вариант проверен?   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan да, я удалил этот комментарий после того, как увидел ваше обновление, я пока ничего не буду удалять :) Я думаю, что FB делает немного больше, чем просто вызывает dcc32 извне, как вы говорите, он также должен загружаться в переменные среды, иначе проекты не будут компилироваться. Глядя на выходной журнал, он вызывает такие проекты, как \B Project.pkg \Q, что, насколько я помню, просто означает выполнение тихой компиляции.   -  person James    schedule 16.09.2014
comment
@DavidHeffernan да, эта опция включена, это то, что я имел в виду в своем предыдущем комментарии о загрузке в env vars из Delphi, и это работает до некоторой степени, просто не загружает системные из Delphi, то есть BDS / BDSCOMMONDIR и т. д.   -  person James    schedule 16.09.2014
comment
Похоже, вам нужно удалить эту опцию. Не загрузит ли он настройки из последней версии Delphi? Какой тип действия вы используете в FB? Я ожидаю, что эта проблема связана с тем, как вы используете FB, но мы не можем увидеть никаких подробностей об этом.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan просто использует Build Delphi Action со всеми настройками проекта, загруженными из Сам проект Delphi. Убрать какой вариант? Этот один?   -  person James    schedule 16.09.2014
comment
Я думаю, что мне следует отказаться от этого, так как я не знаю FB. Вам может понадобиться помощь того, кто это делает. FWIW, я не вижу смысла в FB. Вы можете построить с помощью двухстрочного файла .bat. Одна строка для вызова rsvars.bat и одна для вызова msbuild. Я подозреваю, что FB делает жизнь намного сложнее, чем она должна быть.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan Не беспокойтесь, в любом случае спасибо за вашу помощь. FWIW Я унаследовал FB, это не было моим выбором. Однако сам скрипт намного сложнее, чем просто компиляция нескольких проектов, так что он пригодится.   -  person James    schedule 16.09.2014
comment
На самом деле мои сценарии сборки более сложны, чем создание проектов Delphi, но, опять же, я всегда сам создаю сценарии, используя предпочитаемый инструмент (Python). Имейте в виду, я немного помешан на контроле.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan, ха-ха, часть пользовательского интерфейса упрощает работу + упрощает организацию. Во всяком случае, я отвлекся... что еще более неприятно, если я вернусь к XE3, он будет работать, как и ожидалось!   -  person James    schedule 16.09.2014
comment
Разве вы не можете просто вызвать rsvars.bat и двигаться дальше?   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan Я пытался добавить вызов командной строки rsvars.bat в скрипт перед запуском сборки, но это не сработало. Если вы посмотрите на комментарий к @UweRaabe, я нашел статью, которая была довольно интересной, возможно, реальной проблемой.   -  person James    schedule 16.09.2014
comment
Это не сработало. Трудно диагностировать это, кроме предложения исправить это. Несмотря ни на что, вы знаете, что вам нужно установить эту переменную среды. Как ты это делаешь? Как вы хотите установить его? У вас есть план, как установить эту переменную? Вы используете мсбилд? Я уверен, что уже спрашивал об этом.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan Я не уверен, какую информацию я могу вам дать, кроме того, что запуск rsvars.bat не изменил ничего, что могло бы предположить, что проблема не в этом. На данный момент я вернулся к использованию переменной пользовательской среды и просто приспособил выходной путь FB, который, кажется, исправлен (разочаровывающий, как это есть). Я специально не использую msbuild и, насколько мне известно, FB не использует для создания проектов Delphi.   -  person James    schedule 16.09.2014
comment
FB утверждает, что может использовать msbuild. FB, безусловно, может иметь переменные среды для каждого действия. Я предлагаю вам понять, как вы строите лучше. Потому что, если вы не знаете, используете ли вы msbuild, у вас проблемы. Более того, если вы не используете msbuild, то ваши автоматизированные сборки вполне могут отличаться от ваших интерактивных. Это не то, что вы хотите.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan, это своего рода красота подобных FB, на самом деле не должно иметь значения, использует ли он msbuild за кулисами или нет (если только мне не нужно что-то конкретное для этого). Я использую действие Build Delphi, настраиваю все свои свойства, и оно делает свое дело. Только после обновления до XE7 и, соответственно, FinalBuilder 7 эта проблема начала возникать. Я склоняюсь к тому, что это ошибка в FinalBuilder, потому что путь, который он генерирует, не принадлежит мне или Delphi.   -  person James    schedule 16.09.2014
comment
Если вы не совсем понимаете, что делаете, и меняете глобальные и программные настройки методом проб и ошибок, вы не в состоянии заподозрить, что это ошибка. На мой взгляд, нужно понимать, что ты делаешь. Вы не можете надеяться понять это правильно, если не попытаетесь добиться понимания. Вот почему я делаю эти вещи сам. Чтобы я действительно понимал, что строится, и знал, что это делается правильно и воспроизводимо. И не зависит от глобальных настроек. И позволяет изолировать версии друг от друга.   -  person David Heffernan    schedule 16.09.2014
comment
В любом случае, самый простой способ действовать так, как говорит Уве. Удалите все глобальные настройки. Все переменные окружения системы/пользователя, связанные с Emba. Удалите все настройки Delphi из вашего PATH. Затем добавьте необходимую переменную env в FB, локальную для сборки Delphi.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan есть метод безумия, как я уже сказал, я унаследовал этот процесс сборки, и он существует уже около 10 лет - он работает и работает уже много лет. Я понимаю и принимаю вашу точку зрения и согласен, однако факт в том, что это работало с XE3, а теперь, после установки XE7 и последней версии FB, не работает - путь, по-видимому, продиктован FB, что предполагает ошибку. К вашему сведению, даже ребята из FinalBuilder предполагают, что на самом деле это ошибка.   -  person James    schedule 16.09.2014
comment
Возможно, это ошибка. Я никогда не говорил иначе. Но мои пункты остаются в силе. Стоит знать, что происходит, и понимать вещи. Мои предыдущие комментарии содержат то, что я считаю очень разумным советом. Удалите все глобальные настройки.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan Я не уверен, что вы хотите удалить все глобальные настройки? Какие глобальные настройки? У меня их нет, все, что я сделал, это добавил переменную окружения BDSCOMMONDIR, чтобы FinalBuilder мог ее подобрать - вот и все. Если эта ошибка будет исправлена ​​в FB, я смогу полностью избавиться от этой проблемы и сослаться на BDSCOMMONDIR, загруженный из Delphi. Кроме того, просто чтобы прояснить это - я, конечно, знаю и понимаю, что здесь происходит, однако иногда что-то ломается, и вы делаете все возможное, чтобы попытаться это исправить, потому что ничего логического не работает - вот что здесь происходит.   -  person James    schedule 16.09.2014
comment
@DavidHeffernan тот факт, что я вернулся к этому проекту только через 1+ лет, тоже не помогает :)   -  person James    schedule 16.09.2014
comment
Я полагаю, что под знанием и пониманием я подразумеваю такие вещи, как использование FB msbuild или dcc32. У вас наверняка есть глобальные настройки. Переменные среды, которые вы изменяли, являются глобальными настройками. И установщик BDS изменяет ваш PATH и устанавливает другие переменные. Вы должны удалить все ссылки Borland/Emba из вашей переменной PATH. И удалите все другие переменные env, связанные с Borland/Emba. Таким образом, вы можете изолировать сборки.   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan хорошо, я могу точно сказать, что он использует dcc32, я уже объяснил в предыдущем комментарии, что все вызовы FB были \B Project.pkg \Q, я думаю, что я не упомянул, что он вызывает компилятор Delphi, а не msbuild. Я могу перепроверить все переменные, но, насколько я помню, все, что я сделал, это добавил BDSCOMMONDIR, и это просто требование (на данный момент) для работы FB.   -  person James    schedule 16.09.2014
comment
Хорошо, что ты это знаешь. Я думаю, что я бы сам использовал задачу msbuild, если это вообще возможно. Тогда автоматические сборки будут соответствовать сборкам IDE. Я, наверное, сейчас не помогаю (и не помогал уже какое-то время....) Так что постараюсь помолчать!!   -  person David Heffernan    schedule 16.09.2014
comment
@DavidHeffernan приветствует все советы / отзывы :) Я понимаю и согласен со всеми вашими пунктами, однако, поскольку я уверен, что вы знаете о сроках / временных ограничениях и пытаетесь управлять командой и быть разработчиком + управлять сборками и т. д. означает У меня нет роскоши времени (по крайней мере, на данный момент), чтобы пересмотреть процесс. Я постепенно улучшаю его по мере продвижения здесь и там, и на самом деле в этой итерации было удалено несколько избыточных задач, что было приятно.   -  person James    schedule 16.09.2014
comment
На самом деле, только что заметил, что вы сказали: IDE компилируется с использованием msbuild, а не dcc32? Я, по общему признанию, не знал об этом :) Я просто предположил, что он использует dcc32...   -  person James    schedule 16.09.2014
comment
В конечном итоге он вызывает dcc32, потому что это компилятор. Или dcc64 для Win64. Или действительно один из других компиляторов. Но msbuild управляет им. И, пройдя через msbuild, вы убедитесь, что параметры, переданные в dcc32, идентичны параметрам, сделанным в интерактивных сборках.   -  person David Heffernan    schedule 16.09.2014


Ответы (1)


BDSCOMMONDIR виртуализируется вместе со всеми другими переменными delphi, такими как BDS, иначе невозможно будет скомпилировать несколько версий delphi... что постоянно делают поставщики библиотек/компонентов.

Проблема здесь заключается в ошибке в поддержке Finalbuilder XE7, исправление будет выпущено в ближайшее время.

person Vincent Parrett    schedule 17.09.2014
comment
Спасибо, Винсент, у меня были подозрения, что это может быть связано с разницей в установках, на данный момент это немного мешает мне, поэтому любая предварительная сборка, безусловно, поможет. Кроме того, о виртуализации - они виртуализируются только в том случае, если в параметрах компилятора отмечена галочка Загружать переменные среды при запуске из X, или это всегда должно происходить, если вы используете действие Build Delphi? - person James; 17.09.2014