# Install

The package is available since Lazarus 1.5.

• Go to Package > Install/Uninstall Packages.
• Search in Available for installation for lazprojectgroups'.
• Select it.
• Click on Install selection.
• Save and rebuild IDE. The IDE will ask for confirmation, then it build the package, links it in and restarts itself.

# Features

• New project group - creates a new project group with the active project as target.
• Open project group - opens a dialog to select an .lpg file
• Open recent project group - list of recently opened groups
• Save project group - same function as the editor Save button.
• Saves project group as - same function as the editor More / Save As button.

## Editor

• Save - saves the .lpg including the .lpg files of nested project groups.
• Compile one or more build modes - if the project and build mode is active it calls the IDE function, otherwise it uses lazbuild to compile the project. lazbuild automatically compiles outdated packages used by the project.
• Open, double click - this opens the project in the IDE (closing the currently active).
• Settings - as open, except it also opens the Project Options.
• Run - this loads the project in the IDE
• Compile - Compile using lazbuild. It uses lazbuild to compile a package in order to build independent of any project. It uses the target OS and CPU of lazbuild. lazbuild automatically compiles outdated packages used by the package.
• Open, Settings and double click - opens the package editor of the package.
• Compile - builds the file using the IDE directives.
• Run - runs the file using the IDE directives.
• Settings - opens the dialog to setup the IDE directives for Build and Run.
• You can nest project groups.
• You can add targets multiple times. For example add ProjectA with build mode Debug, then ProjectB, the ProjectA with build mode Release.
• Compile from here - compiles this target and all targets below.
• Earlier - moves the target one position up
• Later - moves the target one position down
• Remove - removes target from the list and puts it into removed targets.
• Double click on a removed target opens the project, package, Pascal file
• When you select a removed target and click Add the target is moved back to the project group at last position.
• More / Save As - saves the project group as a different file.
• Shows files and dependencies or project and packages.

# Concepts

## Projects

• The IDE has only one active project. The active project defines the active target OS, CPU and processor, the loaded packages, search paths and other compiler flags. And the active project has exactly one active build mode.
• When compiling the active project build mode the normal IDE function DoBuildProject is called.
• When compiling another build mode of the active project the active build mode is switched and DoBuildProject is called.
• When compiling a non active project the external tool lazbuild is called and output is shown in the Messages window. Hints/Warnings/Errors of files outside the active project or its packages might be interpreted wrong by the IDE.

## Package

• A package is affected by the active project, for example the project defines the target OS and CPU.
• When compiling a package the tool lazbuild is called to make sure the active project has no effect. lazbuild uses the target OS/CPU it was compiled with.

## Pascal file

• If you want to see output of the Run command, add the following directive to the file:
{%RunFlags Messages+}
• Hint: You can use instantfpc scripts to write Pascal scripts to do arbitrary things, like creating a zip, update documentation, install, uploading files. See InstantFPC

Example for an instantfpc script:

#!/usr/bin/instantfpc
{%BuildCommand instantfpc --skip-run -B -gl myscript.pas}
{%RunCommand instantfpc -gl myscript.pas}
{%RunFlags Messages+}
begin
writeln('Running MyScript ...');
end.

# Bugs / ToDos

• Not yet updating menu items enabled state.
• Changes in the IDE are not yet updating the project group editor. After altering you need to click Reload.
• Changes on disk are not yet recognized. Use Reload.
• Show active build mode, active project
• find in files
• "New" button to create a package/project/file and add to project groups
• clean function, like the Run / Clean up and build dialog
• drag and drop within the editor
• reorder targets
• move targets between sub groups
• move file to another project/package
• save session in project group, allowing to quickly switch the active project
• load sub projects in IDE to use code navigation for files not in the active project
• find references in files