Difference between revisions of "Project Groups"

From Lazarus wiki
Jump to navigationJump to search
Line 21: Line 21:
 
==Editor==
 
==Editor==
  
[[File:ProjectGroupsEditor1.png]]
+
[[File:ProjectGroupsEditor2.png]]
  
*'''Save''' - saves the .lpg including the .lpg files of nested project groups.
+
* '''Save''' - saves the .lpg including the .lpg files of nested project groups.
*'''Add project(s) *.lpi'''
+
* '''Add'''
 +
** '''Add from file''' - Add projects (*.lpi), packages (*.lpk), Groups (*.lpg), single Pascal mfile (*.pas, *.pp) or scripts (e.g. *.sh, *.bat)
 +
** '''Add current project''' - Add active project to project group
 +
*'''Remove''' - removes target from the list and puts it into '''removed targets'''.
 +
*'''Compile''' - compiles the selected target:
 +
** Project/Build Mode: 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 - same as the IDE.
 +
** Package: ompile 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.
 +
** Pascal module: builds the file using the IDE directives.
 +
** Project Group: builds all targets of the project group
 +
** Script: runs the script
 +
 
 +
*'''Project *.lpi'''
 
**'''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.
 
**'''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).
 
**'''Open, double click''' - this opens the project in the IDE (closing the currently active).
 
**'''Settings''' - as open, except it also opens the Project Options.
 
**'''Settings''' - as open, except it also opens the Project Options.
 
**'''Run''' - this loads the project in the IDE
 
**'''Run''' - this loads the project in the IDE
*'''Add package(s) *.lpk'''
+
*'''Package *.lpk'''
*'''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.
+
**'''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.
 
**'''Open, Settings and double click''' - opens the package editor of the package.
*'''Add Pascal file *.pas;*.pp;*.p'''
+
*'''Pascal file *.pas;*.pp;*.p'''
 
**'''Compile''' - builds the file using the IDE directives.
 
**'''Compile''' - builds the file using the IDE directives.
 
**'''Run''' - runs the file using the IDE directives.
 
**'''Run''' - runs the file using the IDE directives.
Line 38: Line 49:
 
*'''Add Project Group *.lpg'''
 
*'''Add Project Group *.lpg'''
 
**You can nest project groups.
 
**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''.
+
*You can add targets multiple times. For example add ''ProjectA'' with build mode ''Debug'' active, then ''ProjectA'' again, except with build mode ''Release'' active.
 
*'''Compile from here''' - compiles this target and all targets below.
 
*'''Compile from here''' - compiles this target and all targets below.
 
*'''Earlier''' - moves the target one position up
 
*'''Earlier''' - moves the target one position up
 
*'''Later''' - moves the target one position down
 
*'''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
 
**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.
 
**When you select a removed target and click '''Add''' the target is moved back to the project group at last position.

Revision as of 15:52, 18 July 2019

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

Menu items

  • New project group - creates a new project group with the active project as target. Same function as the editor More / New.
  • 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

ProjectGroupsEditor2.png

  • Save - saves the .lpg including the .lpg files of nested project groups.
  • Add
    • Add from file - Add projects (*.lpi), packages (*.lpk), Groups (*.lpg), single Pascal mfile (*.pas, *.pp) or scripts (e.g. *.sh, *.bat)
    • Add current project - Add active project to project group
  • Remove - removes target from the list and puts it into removed targets.
  • Compile - compiles the selected target:
    • Project/Build Mode: 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 - same as the IDE.
    • Package: ompile 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.
    • Pascal module: builds the file using the IDE directives.
    • Project Group: builds all targets of the project group
    • Script: runs the script
  • Project *.lpi
    • 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
  • Package *.lpk
    • 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.
  • Pascal file *.pas;*.pp;*.p
    • 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.
  • Add Project Group *.lpg
    • You can nest project groups.
  • You can add targets multiple times. For example add ProjectA with build mode Debug active, then ProjectA again, except with build mode Release active.
  • Compile from here - compiles this target and all targets below.
  • Earlier - moves the target one position up
  • Later - moves the target one position down
    • 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.
  • Reload - reloads the current .lpg, rebuilding the whole tree.

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