delphiopen-sourcedelphi-xe2project-organization

What project options to use for open source Delphi packages?


I've written some Delphi code I would like to share on GitHub. All code is contained in runtime and designtime packages as required. There are many Project Options to set for each project. (Output directories, search paths, compilation options, etc.) I've managed to find some default options that work well for my situation but reading other Q&As here it's clear there are multiple ways of working.

What project options should be used to allow the open source packages to easily be incorporated into other projects?

Delphi Project Options


Solution

  • Let's say you have this structure

    then set

    After compilation for all supported platforms and both Release and Debug you will have this structure in the bin directory

    For installation you have to setup some path inside the IDE.

    If there are some language related units there is also a place to add (see Library - translated)

    This ensures, that you have full debug feature (with Use Debug-DCU option set) and on release you have no debug code in your application.


    Just a sidenote on libraries you should not want to install because you only use them in some projects.

    Simply use the Optionset combined with a environment variable.

    Here my SuperObject.optionset ($(USRLIB) points to a directory, where I collect all common used source code. And $(USRLIB)\ext is the place for all of the external libraries).

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <DCC_UnitSearchPath>$(USRLIB)\ext\superobject;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
        </PropertyGroup>
        <ProjectExtensions>
            <Borland.Personality>Delphi.Personality.12</Borland.Personality>
            <Borland.ProjectType>OptionSet</Borland.ProjectType>
            <BorlandProject>
                <Delphi.Personality/>
            </BorlandProject>
            <ProjectFileVersion>12</ProjectFileVersion>
        </ProjectExtensions>
    </Project>
    

    To use the superobject library I simply add the optionset to the project (right mouse click on build configuration) and everything is fine.