Наличие собственных библиотечных модулей в той же конфигурации сборки, что и проект

Как мне настроить папки библиотеки Delphi, чтобы при работе над проектом у меня были как версии Debug, так и Release версии моей библиотеки модулей? До сих пор я компилировал свою библиотеку в режиме Release после завершения. Но я столкнулся с ситуациями, когда я работаю над проектом, и мне нужно выполнить шаги отладки даже в скомпилированных модулях. Но если они скомпилированы как Release, меня это не пустит. И если я компилирую их как Debug, он помещает код отладки в Release-версию проекта, что ненормально. Я бы хотел, чтобы когда я переключаюсь между Debug и Release в своем проекте, блоки тоже переключались. Можно ли это сделать? Если я помещу папки Debug и Releas в путь к библиотеке Delphi, он будет знать, когда выбрать правильный?

Зачем нужно отлаживать релизную версию? Кроме того, этот вопрос не по теме Stack Overflow — вам лучше задать его в Delphi Praxis.

Dave Nottage 08.12.2022 22:39

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

Uwe Raabe 08.12.2022 22:47

@UweRaabe Речь идет об общей библиотеке (сделанной мной). Это не часть проекта.

Marus Gradinaru 09.12.2022 00:01

Вероятно, вам нужен «Путь DCU отладки» в «Параметры» -> «Язык» -> «Delphi» -> «Библиотека». Соглашение заключается в том, чтобы поместить предварительно скомпилированные DCU отладки в подпапку с именем «debug».

Gerry Coll 09.12.2022 00:47

Итак, в «Путь отладки DCU» я помещаю модули, скомпилированные в режиме отладки, а в «Путь к библиотеке» — версию выпуска?

Marus Gradinaru 09.12.2022 00:51

Delphi IDE может использовать Debug Win32 версию DCU, DCL и BPL, это не проблема. Чтобы правильно собрать ваше приложение, вы можете сделать следующие шаги: установить Output directory вашей библиотеки что-то вроде $(MyLibraryPath)\Bin\$(Platform)\$(Config), затем добавить в Search path вашего приложения такое же значение. После этого компилятор Delphi во всех случаях будет брать правильную версию библиотеки. Он заменит $(Platform) на Win32 или Win64 и $(Config) на Release или Debug в зависимости от текущих параметров здания. $(MyLibraryPath)может быть какой-то абсолютный путь или добавить такую ​​переменную среды.

Oleksandr Morozevych 09.12.2022 09:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец-то мне удалось понять, как это работает: ключ $(Platform) и $(Config).

Я сделал тестовый модуль с функцией, которая сообщает мне, какую конфигурацию я использую:

unit Test;

interface

function GetConfig: String;

implementation

function GetConfig: String;
begin
 {$IFDEF RELEASE} Result:= 'Release'; {$ENDIF}
 {$IFDEF DEBUG} Result:= 'Debug'; {$ENDIF}
end;

end.

Я скомпилировал его в режиме отладки и выпуска и сохранил файлы .dcu в D:\Delphi\MyLIB\Win32\Release и \Debug. И .pas в папке D:\Delphi\MySRC. Затем я иду в «Инструменты»> «Параметры»> «Язык»> «Delphi»> «Библиотека» и добавляю D:\Delphi\MyLIB\$(Platform)\$(Config) в раздел «Путь к библиотеке» и «D:\Delphy\MySRC» в «Путь просмотра».

Теперь, если я создам новый проект и использую этот модуль, будет выбрана правильная версия в соответствии с конфигурацией сборки. И если я переключусь на отладку и сделаю над этой функцией Trace Into (F7), я смогу отладить внутри нее.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Test;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:= GetConfig;
end;

end.

Спасибо за комментарий Oleksandr Morozevych!

Другие вопросы по теме