diff options
Diffstat (limited to 'doc/kdevelop/getting-started.docbook')
-rw-r--r-- | doc/kdevelop/getting-started.docbook | 3221 |
1 files changed, 3221 insertions, 0 deletions
diff --git a/doc/kdevelop/getting-started.docbook b/doc/kdevelop/getting-started.docbook new file mode 100644 index 00000000..11a08253 --- /dev/null +++ b/doc/kdevelop/getting-started.docbook @@ -0,0 +1,3221 @@ + +<!-- +Please keep the formatting simple. +Do not indent XML constructs. +Keep lines at 80 characters length maximum. +--> + +<chapter id="getting-started"> + +<chapterinfo> +<authorgroup> +<author><firstname>Bernd</firstname><surname>Pol</surname></author> +<!-- TRANS:ROLES_OF_TRANSLATORS --> +</authorgroup> +</chapterinfo> + +<title>Getting Started with &kdevelop; — a Guided Tour</title> + +<para>Now that you have got your new &kdevelop; &IDE;, how are you going to make +good use of it? As this is a complex application, the learning curve may be +somewhat steep, especially if you are not already used to this type of an +Integrated Development Environment.</para> + +<para>We will try to soften this learning curve a bit by stepping through the +makings of a simple KDE C++ application. Thereby we will have a (cursory) look +at:</para> + +<simplelist> +<member><link linkend="gettingstarted-overview">A first look — the user +interface elements of the &kdevelop; &IDE;.</link></member> +<member><link linkend="gettingstarted-configure">Doing some initial +configuration.</link></member> +<member><link linkend="gettingstarted-new">How to create a new project.</link> +</member> +<member><link linkend="gettingstarted-edit">Some tips about dealing with +documents.</link></member> +<member><link linkend="gettingstarted-compile">How to compile the application in +this project.</link></member> +<member><link linkend="gettingstarted-extend">How to add classes and other +detail to your project.</link></member> +<member><link linkend="gettingstarted-debug">What to do to debug the +application.</link></member> +<member><link linkend="gettingstarted-doc">Some basic tools to build program or +user documentation.</link></member> +<member><link linkend="gettingstarted-keys">Last but not least, keyboard +shortcuts</link></member> +</simplelist> + +<para>Before we start, one important concept should be made clear.</para> + +<formalpara> +<title>What to expect?</title> +<para>As said, &kdevelop; is an <emphasis>Integrated Development +Environment</emphasis>. That means in essence that &kdevelop; is no development +tool by itself but rather a graphical front end to easily access a wide range of +development tools, many of which actually would require complex keyboard +commands run from a text console.</para> +</formalpara> + +<para>While &kdevelop; eases many of those programming tasks, much of the +complexity from this bundle of tools still remains which means that in order to +fully understand the &kdevelop; &IDE; you will still need to comprehend these +tools actually running beneath the surface.</para> + +<para>Hence, we cannot teach you how to build software, but rather introduce you +to some of the ways &kdevelop; was designed to ease such a software building +process. If you want to learn more about what an Integrated Development +Environment is meant for, you might want to have a look at the <link +linkend="unixdev">Development on &UNIX;</link> historical overview and there +especially at the <link linkend="unixdev-ide">Integrating Concepts and +Tools</link> chapter.</para> + +<note> +<para>The following discussions apply to the default case, where &kdevelop; +starts up in the <guilabel>Simplified IDEAl Window Mode</guilabel>. If you +already did switch to another user interface mode some items may not be there as +described or will behave slightly different. If in doubt which user interface +mode your &kdevelop; currently uses, check with the +<menuchoice><guimenu>Settings</guimenu> <guimenuitem>Configure +KDevelop...</guimenuitem> <guimenuitem>User Interface</guimenuitem></menuchoice> +dialog.</para> +</note> + +<sect1 id="gettingstarted-overview"> +<title>A Very First Look at &kdevelop;</title> + +<para>This is all about what you will see when you first started &kdevelop;. +You will find preliminary information about:</para> + +<simplelist> +<member><link linkend="gettingstarted-overview-basic">What is there on the +surface?</link></member> +<member><link linkend="gettingstarted-overview-help">How to get some +help.</link></member> +<member><link linkend="gettingstarted-overview-menu">What is in the +menus?</link></member> +<member><link linkend="gettingstarted-overview-tools">What are those tool views +for?</link></member> +</simplelist> + +<sect2 id="gettingstarted-overview-basic"> +<title>On the Surface</title> + +<para>When you start &kdevelop; for the first time you will get a display +similar to this one:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="empty-ide.png" format="PNG"/> +</imageobject> +<caption> +<para>The &kdevelop; initial layout</para> +<para>(Actually the initial &kdevelop; window will be larger, but the elements +you see are the same.)</para> +</caption> +</mediaobject> +</screenshot> + +<formalpara> +<title>Workspace Area and Tool View Tabs</title> +<para>In this initial case &kdevelop; uses the so-called <link +linkend="uimodes-survey">IDEAl user interface mode</link>. A workspace area of +maximum possible size is surrounded left, bottom, and right by a series of +buttons which act similar to tabs on a tabbed display. If you click on one of +those tabs, a so-called <emphasis>tool view window</emphasis> will open which +allows you to work on a specific task.</para> +</formalpara> + +<formalpara> +<title>Menu and Toolbars</title> +<para>On top there is the usual menubar, followed by several rows of toolbars, +some being initially empty. They will get populated once there is a project open +for actual work.</para> +</formalpara> + +<formalpara> +<title>Status Bar</title> +<para>Finally, there is a status bar on the bottom of the window where short +informations on several tasks will be shown.</para> +</formalpara> +</sect2> + +<sect2 id="gettingstarted-overview-help"> +<title>How to Get Some Help</title> + +<para>Besides the <guimenu>Help</guimenu> menu which offers answers to specific +questions, the status bar and two kinds of tool tips provide some quick +information.</para> + +<formalpara> +<title>What Does This Menu Entry Do?</title> +<para>When you place the mouse cursor on a menu entry, there will usually some +short information be displayed in the status bar. While in most cases this +repeats just the name of the selection, in some cases it will provide additional +information about the purpose of the menu command.</para> +</formalpara> + +<formalpara> +<title>What Is the Name of This Item?</title> +<para>On many items a short function name tool tip will pop up when you place +the cursor on it for a few seconds. This is useful for quick orientation on +toolbar or tool view tabs in IDEAl mode when the &IDE; has been set up to +display icons only on these buttons.</para> +</formalpara> + +<formalpara> +<title>What Does This Item Do?</title> +<para>More information is available through expanded tool tip help for many +items on the &IDE;. Select <menuchoice><guimenu>Help</guimenu> +<guimenuitem>What's This?</guimenuitem></menuchoice> or press +<keycombo><keycap>&Shift;</keycap><keycap>F1</keycap></keycombo>, then with the +question mark cursor select the item you want to know more of. You can as well +open any menu this way and click on a specific menu entry (active as well as +greyed disabled ones) to see if more information is available.</para> +</formalpara> +</sect2> + +<sect2 id="gettingstarted-overview-menu"> +<title>What is in the menus?</title> + +<para>There are ten menus selectable on the menubar. Most of them get fully +populated once a project is open for actual work while others require at least +one document be open in an editor window. In short, they will allow the +following action types.</para> + +<note> +<para>This is only a preliminary overview. For a detailed menu description see +the <link linkend="commands">Command Reference</link>.</para> +</note> + +<variablelist> +<varlistentry> +<term><guimenu>File</guimenu></term> +<listitem> +<formalpara> +<title>Usual Actions</title> +<para>This is pretty standard. It allows to create, open, save, print, and close +document files as well as quitting the &kdevelop; application as usual.</para> +</formalpara> + +<formalpara> +<title>Revert All</title> +<para>This allows to revert all recent, yet unsaved changes by reloading the +file from the disk. This works on any file you edit, not only on those which are +part of a project.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Edit</guimenu></term> +<listitem> +<para>This menu is useful only if a document is opened.</para> + +<formalpara> +<title>Usual Actions</title> +<para>It provides the usual undo/redo and cut/copy/paste actions. +Furthermore it allows to select text blocks in various ways.</para> +</formalpara> + +<formalpara> +<title>Search and Replace</title> +<para>There are two very powerful search facility available, +<menuchoice><guimenu>Edit</guimenu> <guimenuitem>Find in +Files...</guimenuitem></menuchoice>, and <menuchoice><guimenu>Edit</guimenu> +<guimenuitem>Find-Select-Replace...</guimenuitem></menuchoice>. These allow, in +addition to the usual search and replace actions limited to the the current +document, to conduct global search or search-and-replace actions in one single +turn.</para> +</formalpara> + +<formalpara> +<title>Advanced Text Edit</title> +<para>There are provisions to reformat the current document and to automatically +complete partially typed texts in various ways.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>View</guimenu></term> +<listitem> +<para>Like the <guimenu>Edit</guimenu> menu, this menu is useful only if there +is an open project. I this case there will be the following actions available +(amongst others):</para> + +<formalpara> +<title>Navigation History</title> +<para>Switch back and forth through the documents &etc; you visited.</para> +</formalpara> + +<formalpara> +<title>Error Tracking</title> +<para>Navigate to the source lines of the errors encountered in the most recent +compilation/build process.</para> +</formalpara> + +<formalpara> +<title>Editor Related Actions</title> +<para>Some entries in the <guimenu>View</guimenu> menu control the look and view +of the editor you use. In case of the &kate; Part (Embedded Advanced Text +Editor) there will be the following controls available:</para> +</formalpara> + +<itemizedlist> +<listitem> +<para>Control the word wrap behavior in the document window.</para> +</listitem> +<listitem> +<para>Show or hide several border displays in the document windows: line +numbers, icons, and, additionally, bookmark marks in the scroll bar.</para> +</listitem> +<listitem> +<para>Control the display of folded (temporarily hidden) sections in a source +text.</para> +</listitem> +</itemizedlist> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Project</guimenu></term> +<listitem> +<para>All work of &kdevelop; is based on <emphasis>projects</emphasis> which +basically collect source files, build management files, and other information in +one project directory. In this menu you control which project to use, which +properties it has, and some other managing actions. +In particular:</para> + +<formalpara> +<title>Open a Project</title> +<para>Allows to create new projects, open existing ones, and import projects +from other environments.</para> +</formalpara> + +<formalpara> +<title>Project Options</title> +<para>Allows to define a whole bunch of different project properties.</para> +</formalpara> + +<formalpara> +<title>Classes Management</title> +<para>Add new classes to the project and traverse the inheritance tree of a +class.</para> +</formalpara> + +<formalpara> +<title>Distribute Project</title> +<para>Helps to build distribution packages of the project.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Build</guimenu></term> +<listitem> +<para>This menu is all about compiling and documenting the project. Thus it is +of use only when a project is actually open. In this case it provides the +following actions:</para> + +<formalpara> +<title>Compile, Link, Execute</title> +<para>Allows to compile and link the whole project or parts of it as well as run +the application from within the &IDE;.</para> +</formalpara> + +<formalpara> +<title>Prepare Build Operations</title> +<para>This actually depends on the make system you use for this project. In the +case of automake projects it allows to run <filename>Makefile.cvs</filename> and +<filename>configure</filename> on their own. There are also provisions to remove +translated files from the project in various stages of intensity.</para> +</formalpara> + +<formalpara> +<title>Install the Application</title> +<para>Allows to install the application both in local directories as well as in +system directories only accessible to the root user.</para> +</formalpara> + +<formalpara> +<title>API Documentation</title> +<para>Build or remove a doxygen-based API documentation of the project as +defined in the project options.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Debug</guimenu></term> +<listitem> +<para>Although this menu will be filled once a project is active, it of course +is useful only if the actual project has been previously compiled with debugging +information (this is basically set up in <menuchoice><guimenu>Project</guimenu> +<guimenuitem>Project Options..</guimenuitem></menuchoice>). There are the +following actions available in this case:</para> + +<formalpara> +<title>Usual Debugger Actions</title> +<para>The first section in the <guimenu>Debug</guimenu> provides a graphical +interface to the GDB &GNU; symbolic debugger. It allows to start and stop your +application in the debugger and step through it in various ways.</para> +</formalpara> + +<formalpara> +<title>Breakpoints</title> +<para>&kdevelop; provides several means to set breakpoints in your application +sources. One is through the use of the <guimenuitem>Toggle +Breakpoint</guimenuitem> menu entry.</para> +</formalpara> + +<formalpara> +<title>Advanced Debugging</title> +<para>Other <guimenu>Debug</guimenu> menu entries allow more sophisticated +program analysis. Use +<keycombo><keycap>&Shift;</keycap><keycap>F1</keycap></keycombo> to get more +information about their purpose.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Scripts</guimenu></term> +<listitem> +<para>You can call various scripts from this menu to more easily accomplish +tedious actions on the text in the currently selected editor window. The +available actions depend on the selected script, however. +</para> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Window</guimenu></term> +<listitem> +<para>This is fairly standard. You may select any open document window as well +as close one or more documents windows in here. You may even select a set of +document windows to be closed in one single turn.</para> + +<para>Depending on the editor plugin you use may there be other menu items as +well. So will the default Kate editor plugin additionally allow to split the +editor window horizontally as well as vertically.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Tools</guimenu></term> +<listitem> +<para>&kdevelop; is highly customizable. +You may select a favorite editor for your documents as well as provide external +and plugged-in tools to extend the basic &IDE; capabilities. The +<guimenu>Tools</guimenu> menu reflects most of this setup.</para> + +<formalpara> +<title>Advanced Editing</title> +<para>The upper set of <guimenu>Tools</guimenu> menu entries will be provided by +the editor plugin which is in use. You may select your favorite editor via +<menuchoice><guimenu>Settings</guimenu> <guimenuitem>Configure +KDevelop...</guimenuitem> <guilabel>Editor</guilabel></menuchoice>. Once an +editable document file is selected, the upper part of the +<guimenu>Tools</guimenu> menu will provide advanced editing commands specific to +the editor part in use.</para> +</formalpara> + +<formalpara> +<title>Web Side Handling</title> +<para>In case the active document window contains a HTML page (⪚ displayed +from a <guilabel>Documentation</guilabel> selection), the +<guimenu>Tools</guimenu> will show additional menu entries which provide various +means to handle Web pages.</para> +</formalpara> + +<formalpara> +<title>Other Tools</title> +<para>Usually there will be a bunch of other entries according to the currently +available tools. Use <keycombo><keycap>&Shift;</keycap> +<keycap>F1</keycap></keycombo> to get more information about their +purposes.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Settings</guimenu></term> +<listitem> +<para>This menu allows you to show and hide menubar, toolbars and statusbar. +Also, you can configure shortcuts, toolbars, notifications, the editor and +&kdevelop;'s general behavior.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenu>Help</guimenu></term> +<listitem> +<para>Here you can open this KDevelop manual, look up terms in various +documentation files, open man pages (the traditional UNIX manual format) and +info pages (the GNU manual format). Furthermore you can report bugs here or get +some info about your current KDevelop version and its authors.</para> +</listitem> +</varlistentry> +</variablelist> +</sect2> + +<sect2 id="gettingstarted-overview-tools"> +<title>What are those tool views for?</title> + +<para>In the IDEAl user interface mode the workspace will be surrounded by three +areas of buttons, so-called <emphasis>tool view tabs</emphasis>. They provide +access to <emphasis>tool view windows</emphasis> which accomplish main tasks +during software development. Each of these three tool view areas serves a +different main purpose.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>Left Side</title> +<para>Provides access to navigation and selection tools</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Bottom</title> +<para>These views display messages produced by various tools.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Right Side</title> +<para>Provides access to documentation and source management tools.</para> +</formalpara> +</listitem> +</itemizedlist> + +<para>The number of tool view tabs shown will change once a project is open for +actual work. More tools to work on that project will be available then. The +actual number of tool views depends on the <link linkend="plugin-tools">Plugin +Tools</link> being currently available to &kdevelop;. You will find more on this +topic in the <link linkend="setup">Configuring KDevelop</link> chapter.</para> + +<para>Currently, with no project open and the default number of plugin tools +loaded, you will find the following tool views. Clicking on a tab will open +respectively close its tool view window.</para> + +<variablelist> +<varlistentry> +<term>Navigation and Selection</term> +<listitem> +<formalpara> +<title>File Selector</title> +<para>Provides a panel to navigate the directory tree and select files for work +just like you do in the &konqueror;. Clicking a file will open it in an +appropriate editor window in the workspace area. A right click in the file +selector area will pop up a navigation and file manipulation menu.</para> +</formalpara> + +<formalpara> +<title>File List</title> +<para>Lists the currently open files. Clicking on a file will usually select its +editor window in the workspace area. Use this to quickly navigate in a large +number of open files. Furthermore this view provides a means to organize the +open files into different <emphasis>sessions</emphasis>. This is particularly +useful in very large and complex projects to help the developer concentrate on +different tasks. Right clicking a file will pop up a file manipulation +menu.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term>Messages Displays</term> +<listitem> +<formalpara> +<title>Application</title> +<para>Displays the output from an application started from within +&kdevelop;.</para> +</formalpara> + +<formalpara> +<title>Diff</title> +<para>Used to display patch file contents. +Displays the output from the difference viewer tool started from the +<menuchoice><guimenu>Tools</guimenu> <guimenuitem>Difference +Viewer...</guimenuitem></menuchoice> menu.</para> +</formalpara> + +<formalpara> +<title>Messages</title> +<para>Displays messages produced by the build tools called from within +&kdevelop;, usually from the <guimenu>Build</guimenu> menu.</para> +</formalpara> + +<formalpara> +<title>Find in Files</title> +<para>Displays the list of items found by the global search operation started +from the <menuchoice><guimenu>Edit</guimenu> <guimenuitem>Find in +Files...</guimenuitem></menuchoice> menu. Clicking on a line here will +automatically open that file at the specified position in an editor +window.</para> +</formalpara> + +<formalpara> +<title>Replace</title> +<para>Lists the results of the global search-and-replace operation issued from +the <menuchoice><guimenu>Edit</guimenu> +<guimenuitem>Find-Select-Replace...</guimenuitem></menuchoice> menu. In this +view you can decide on every found item whether you really want it be replaced +or not.</para> +</formalpara> +<note> +<para>This global search-and-replace facility is actually available only after a +project has been loaded into &kdevelop;. Otherwise the global replace tool in +the <menuchoice><guimenu>Edit</guimenu> +<guimenuitem>Find-Select-Replace...</guimenuitem> </menuchoice> menu will in +fact be be disabled.</para> +</note> + +<formalpara> +<title>Konsole</title> +<para>Opens a &kde; <application>Konsole</application> like terminal emulator +window where you can use keyboard commands in a traditional &UNIX; command line +interface.</para> +</formalpara> +</listitem> +</varlistentry> + +<varlistentry> +<term>Documentation and Source Manipulation</term> +<listitem> +<formalpara> +<title>Documentation</title> +<para>&kdevelop; provides access to a whole bunch of documentation through this +tool. You may here access document files, usually online from remote locations, +in a structured way. And there are several ways available to directly access +valuable information from &kde; or &Qt; manuals.</para> +</formalpara> + +<para>See the <link linkend="documentation">Documentation</link> and <link +linkend="setup-docu">Configuring the Documentation</link> chapters for more +details.</para> + +<formalpara> +<title>Code Snippets</title> +<para>This tool allows you to permanently store selected texts for later use in +other editing cycles. It is a very flexible tool, as any text snipped stored +here may contain a set of variables which will get their actual values at the +time when you insert such a snippet in some other text.</para> +</formalpara> +<para>More information on this is available in the <link +linkend="editing-snippets">Code Snippets</link> and <link +linkend="setup-snippets">Setting Up the Code Snippets Tool</link> +chapters.</para> +</listitem> +</varlistentry> +</variablelist> +</sect2> +</sect1> + +<sect1 id="gettingstarted-configure"> +<title>A Bit of Configuration</title> + +<para>Before we actually start a first example project, we should tailor the +&kdevelop; behavior to our needs. Although most of the default settings will be +appropriate for now, there are a few places which better should be +adjusted.</para> + +<note> +<para>If you want to know more about &kdevelop; configuration, have a look at +the <link linkend="setup">Configuring KDevelop</link> chapter.</para> +</note> + +<sect2 id="gettingstarted-configure-general"> +<title>Some General Settings</title> + +<para>To configure &kdevelop;, click the +<menuchoice><guimenu>Settings</guimenu></menuchoice> menu and select +<menuchoice><guimenuitem>Configure KDevelop...</guimenuitem></menuchoice>. The +<guilabel>Configure KDevelop</guilabel> dialog will pop up, showing the +following <guilabel>General</guilabel> settings page to the right.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-general.png" format="PNG"/> +</imageobject> +<caption> +<para>The &kdevelop; general configuration dialog</para> +</caption> +</mediaobject> +</screenshot> + +<para>Most of the defaults will be o.k. +But you will probably want to change two of those settings.</para> + +<formalpara> +<title>Default projects directory</title> +<para>At first start of &kdevelop; this will most likely be preset to your home +directory. Most people however prefer a dedicated projects directory for +software development. Change the text box to your preferred parent development +directory. You may select it from the directory tree if you press the +<guilabel>Open file dialog</guilabel> button labeled with a folder icon to the +right of it.</para> +</formalpara> + +<para>In our examples we will assume a (somewhat artificial) user called +<filename class="directory">devel</filename>. +Thus always replace this <quote>devel</quote> by your user name. Our devel user +will utilize the <filename class="directory">/home/devel/projects</filename> +parent directory for actual development. Again, replace <filename +class="directory">projects</filename> with your development directory name. +</para> + +<para>&kdevelop; will by default set up an own subdirectory below this parent +for every new project you create. So will ⪚ all files of a project named +<quote>Hello</quote> in our case be located in the <filename +class="directory">/home/devel/projects/hello</filename> directory.</para> + +<para>You may of course temporarily override these directory settings if you +need to. See the <link linkend="applicationwizard">&appwizard;</link> chapter +for more info on this.</para> + +<formalpara> +<title>Compiler output</title> +<para>Whenever &kdevelop; compiles some source, it will display the messages of +the <application>make</application>, etc. build tools in the +<guilabel>Messages</guilabel> window in the lower part of the workspace area. +Usually these messages will be overwhelmingly wordy. To keep a better overview +of what happens, &kdevelop; has some means of shortening those messages built +in.</para> +</formalpara> + +<para>Depending on the &kdevelop; version you use, the <guilabel>Compiler +output</guilabel> selection may be preset to <quote>Long</quote>, which will +cause all message contents be fully shown. You may probably want to change this +to the far more convenient <quote>Very Short</quote> setting. Just select this +from the drop down box.</para> + +<caution> +<para>Be aware that only <emphasis>most basic</emphasis> information will be +shown in the <guilabel>Messages</guilabel> window this way. In case of errors +during ⪚ a build run you will most likely want to see more, if not all, of +the message texts. They are not lost, however. Just right click into the +<guilabel>Messages</guilabel> window and select ⪚ <quote>Full Compiler +Output</quote> from the popup menu.</para> +</caution> +</sect2> + +<sect2 id="gettingstarted-configure-search"> +<title>Initializing Documentation Search Indexes</title> + +<para>There is another, not so obvious, item which preferably should be +initialized before you start actual development work. This is because you will +want to perform documentation search regularly during development. &kdevelop; +requires some search indexes be created before such search operations can be +performed. So let's initialize them before we attempt our first steps +toward actual &kdevelop; work.</para> + +<para>Open the <guilabel>Documentation</guilabel> tool view at the right side of +the &kdevelop; main window. There open the <guilabel>Search</guilabel> dialog +page.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="documents-search.png" format="PNG"/> +</imageobject> +<caption><para>Where to generate the search indexes.</para></caption> +</mediaobject> +</screenshot> + +<para>Now press the <guibutton>Update Config</guibutton> button to make sure the +basic search tools are properly set up. A dialog should pop up, telling +<quote>Configuration file updated</quote>. Click <guibutton>OK</guibutton> to +make it disappear.</para> + +<para>This done, &kdevelop; will be ready to parse the documentation it knows of +and build some useful search indexes from it. Press the <guibutton>Update +Index</guibutton> button to the right. Now the <guilabel>Generating Search +Index</guilabel> dialog will pop up showing the progress of the index build +operations.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-docu-indexgen.png" format="PNG"/> +</imageobject> +<caption><para>&kdevelop; is generating documentation search +indexes.</para></caption> +</mediaobject> +</screenshot> + +<para>This will take some time depending on the size of documentation and the +speed of your machine. But finally the <guibutton>Cancel</guibutton> will make +place to <guibutton>OK</guibutton>. Just press this button to proceed.</para> + +<note> +<itemizedlist> +<listitem> +<para>This usually should work out of the box. In some cases the +<application>htdig</application> application &kdevelop; uses to perform its full +text searches might not be properly set up. Refer to the <link +linkend="setup-docu-textsearch">Setting Up Text Search Indexes</link> chapter +for more help in this case.</para> +</listitem> +<listitem> +<para>To be able to look up &kde; and &Qt; specific API documentation, it is +mandatory that the <emphasis>KDELibs Apidocs</emphasis> were present when +&kdevelop; was installed. If you experience problems building the indexes or +perform the <link linkend="gettingstarted-edit-defs">identifier lookup +examples</link> later in this chapter, make sure that this documentation exists +and is accessible to &kdevelop;. See <link linkend="kdevelop-install">Installing +KDevelop</link> fore more detail.</para> +</listitem> +</itemizedlist> +</note> +</sect2> +</sect1> + + +<sect1 id="gettingstarted-new"> +<title>Starting a New Project</title> + +<para>Almost any application will consist of dozens, hundreds, even thousands of +files which need kept structured and maintainable. To accomplish this, +&kdevelop; organizes software development tasks in +<emphasis>projects</emphasis>. Thus the first practical step to develop software +in &kdevelop; usually is to create a new project.</para> + +<para>Fortunately this is fairly easily accomplished. &kdevelop; provides the +so-called &appwizard; tool for this. (See the <link +linkend="applicationwizard">Getting Started — the &appwizard;</link> +chapter for more.)</para> + +<para>We will now start a simple &kde; application project to illustrate how +easily this is accomplished and which files and tools &kdevelop; will have +provided. Thereby we will have a short look at:</para> + +<simplelist> +<member><link linkend="gettingstarted-new-setup">How to create a new project +with the help of the &appwizard;.</link></member> +<member><link linkend="gettingstarted-new-files">Which files the &appwizard; +initially did set up.</link></member> +<member><link linkend="gettingstarted-new-toolviews">What about the additional +tool view shown with the project?</link></member> +</simplelist> + +<sect2 id="gettingstarted-new-setup"> +<title>How to Create a New Project</title> + +<para>Let us create a rather simple <quote>Hello World</quote> &kde; project. +Just follow these steps.</para> + +<procedure> +<step> +<para>To start the &appwizard; click the <menuchoice><guimenu>Project</guimenu> +<guimenuitem>New Project...</guimenuitem></menuchoice> menu.</para> +</step> + +<step> +<para>The <guilabel>Create New Project</guilabel> dialog will pop up. In the +upper left <guilabel>All Projects</guilabel> window there will be a number of +programming languages listed.</para> + +<substeps> +<step> +<para>We want to build a &kde; C++ application as usual, thus click on the +<guilabel>+</guilabel> label left of the <guilabel>C++</guilabel> label to open +this branch.</para> +</step> + +<step> +<para>A series of possible application targets will be displayed. We will build +a &kde; application, thus open the next sub-branch via the +<guilabel>+</guilabel> label next to <guilabel>KDE</guilabel></para> +</step> + +<step> +<para>Now you will be offered a series of possible <emphasis>project +templates</emphasis>. Navigate down to the end of this branch and click +<guilabel>Simple KDE Application</guilabel>.</para> + +<para>A preview and short description of the application this project template +will produce pops up in the two windows to the right.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-new-project.png" format="PNG"/> +</imageobject> +<caption> +<para>Selecting a <quote>Hello World</quote> project template</para> +</caption> +</mediaobject></screenshot> +</step> + +<step> +<para>Our application will need a name. Find the <guilabel>Properties</guilabel> +area on the dialog bottom and enter a suitable name into the +<guilabel>Application name</guilabel> input field.</para> + +<para>We use <quote>Hello</quote> in our example, but you can use whatever you +like, provided the name consists of letters, number digits, and underlines only. +You will find that the &appwizard; rejects any other character.</para> +</step> + +<step> +<para>Make sure the <guilabel>Location</guilabel> text box below the input field +shows the name of your top project directory as set up in the <link +linkend="gettingstarted-configure">A Bit of Configuration</link> chapter above. +If it does not do so, enter a suitable directory name or select one from the +directory list provided by the folder labeled button to the right.</para> + +<para>If all went well, the <guilabel>Final location</guilabel> line at the +bottom will show the directory path your new project will use. In case there was +an <quote>(invalid)</quote> suffix appended, try another name for your project +and/or make sure the top project directory in the <guilabel>Location</guilabel> +text box really exists and is writable.</para> +</step> + +<step> +<para>Once everything is right, the <guibutton>Next</guibutton> button in the +bottom row of the dialog will be enabled. Click it to proceed.</para> +</step> +</substeps> +</step> + +<step> +<para>This will lead you to the <guilabel>Project Options</guilabel> dialog +page. Make sure the <guilabel>Author</guilabel> and <guilabel>Email</guilabel> +text boxes are properly filled in. Usually they will default to your general +&kde; user settings as given in the <guilabel>Password & User +Account</guilabel> dialog of the &kde; Control Center. If not, change them to +some settings you prefer for your application.</para> + +<screenshot id="gettingstarted-new-setup-options"> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-hello-options.png" format="PNG"/> +</imageobject> +<caption> +<para>Provide your name and (optionally) email address.</para> +</caption> +</mediaobject> +</screenshot> + +<note> +<para>You must provide an <guilabel>Author</guilabel> name at least. This is +mandatory for the application files setup.</para> +</note> + +<para>If all is right, the <guibutton>Next</guibutton> button will be enabled. +Click it to further proceed.</para> +</step> + +<step> +<para>The following <guilabel>Version Control System</guilabel>, +<guilabel>Template for .h Files</guilabel>, and <guilabel>Template for .cpp +Files</guilabel> dialog pages are not of interest for now. Skip them by clicking +the <guibutton>Next</guibutton> buttons and, finally, the +<guibutton>Finish</guibutton> button.</para> +</step> +</procedure> + +<para>That was all! +The &appwizard; will take over and construct a series of initial files in the +<guilabel>Final location</guilabel> directory you provided in step 2c +above.</para> + +<para>Once this file creation phase is finished, &kdevelop; will open an editor +window for the <emphasis>application main window</emphasis> implementation file +(which is <filename>hello.cpp</filename> in our example), so you can readily +proceed.</para> +</sect2> + +<sect2 id="gettingstarted-new-files"> +<title>Initial Project Files</title> + +<para>Even if our sample Hello project is fairly simple, the &appwizard; did +create a whole bunch of source and project management files. You will most +easily list them if you open the <guilabel>File Tree</guilabel> tool view on the +bottom left. This will open a file list similar to the one below.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-hello-new.png" format="PNG"/> +</imageobject> +<caption> +<para>Initial files in our <quote>Hello World</quote> project</para> +</caption> +</mediaobject> +</screenshot> + +<para>To demonstrate the main bunch of files the &appwizard; produced, we did +open most of the directory branches in the left-hand <guilabel>File +Tree</guilabel> tool view window. Just click the branch names in the tree to see +for yourself.</para> + +<para>Additionally, just for demonstration, we did as well open most of the +branches the <guilabel>Automake Manager</guilabel> tool view window to the right +where some of the project sources are listed, too.</para> + +<sect3 id="gettingstarted-new-files-copyright"> +<title>Copyright Issues</title> + +<para>All &GNU; conformant applications must be copyrighted. There are two +levels which require copyright notices, <emphasis>individual source +files</emphasis> and <emphasis>run-time application level</emphasis>. The +&appwizard; did already put appropriate copyright and licensing information into +the project files.</para> + +<formalpara> +<title>Source File Level Copyrights</title> +<para>Do you remember the <link linkend="gettingstarted-new-setup-options"> +<guilabel>Project Options</guilabel></link> dialog page in the new project +setup? You had to provide your (the developer's) name and optionally an +email address there. Now refer to the top of the <guilabel>hello.cpp</guilabel> +editor window currently displayed in the workspace area. The &appwizard; did +enter these statements on top of the licensing header of every source file it +created.</para> +</formalpara> + +<programlisting> +/*************************************************************************** + * Copyright (C) 2006 by Joe User * + * joe@user.com * + * * + * This program is free software; you can redistribute it and/or modify * +</programlisting> + +<para>You will find exactly the same text headers in every source file you will +create inside &kdevelop; (provided you use the proper built in tools for file +creation). &kdevelop; remembers these settings in some template files you may +find in the <filename class="directory">templates</filename> directory.</para> + +<formalpara> +<title>Application Run-Time Copyrights</title> +<para>Once your &kde; application runs, the user may display some +<guilabel>About</guilabel> data, usually from the <guimenu>Help</guimenu> menu. +The &appwizard; did also take care of this. If you have a look at the +<filename>main.cpp</filename> file, you will find an entry similar to the one +below.</para> +</formalpara> + +<programlisting> +int main(int argc, char **argv) +{ + KAboutData about("hello", I18N_NOOP("Hello"), version, description, + KAboutData::License_GPL, "(C) 2006 Joe User", 0, 0, + "joe@user.com"); + about.addAuthor( "Joe User", 0, "joe@user.com" ); +</programlisting> + +<para>This will put the main developer's name (<quote>Joe User</quote> in +our case) and email address into the <guilabel>About</guilabel> copyright page +in the display and list this name and address on the +<guilabel>Authors</guilabel> page there as well.</para> + +<important> +<para>Whenever you make substantial changes to an existing project, be sure to +enter your name and email address to the copyright notices on every file you +changed and to the run-time copyright display as well. Don't be shy, you +help the open source society considerably if you do so.</para> +</important> +</sect3> + +<sect3 id="gettingstarted-new-files-source"> +<title>Initial Source Files</title> + +<para>The &appwizard; did put the source files into the <filename +class="directory">src</filename> sub-directory of the project's directory. +You will find the <filename>main.cpp</filename>, <filename>hello.h</filename>, +and <filename>hello.cpp</filename> files there as you may have possibly +expected.</para> + +<para>There are some additional files you usually will find in a typical &kde; +application, namely</para> + +<itemizedlist> +<listitem> +<para><filename>hello.desktop</filename> contains some meta data used by +&kdevelop; to maintain and start the application.</para> +</listitem> + +<listitem> +<para><filename>hi16-app-hello.png</filename>, and +<filename>hi32-app-hello.png</filename> contain some initial default icons, +&kdevelop; will use for application display.</para> +</listitem> + +<listitem> +<para>Finally, <filename>helloui.rc</filename> contains a description of the +application's user interface, currently the menus the application will +provide.</para> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-files-doc"> +<title>Initial Application Documentation</title> + +<para>In the <filename class="directory">doc/en</filename> subdirectory of the +project you will find the <filename>index.docbook</filename> file. This is a +default template from where you can start to write a suitable user +documentation.</para> +</sect3> + +<sect3 id="gettingstarted-new-files-project"> +<title>Project and Auxiliary Files</title> + +<para>You will have noted that the files we introduced so far are listed in +boldface in the <guilabel>File Tree</guilabel> tool view while most of the other +files are not. This depicts the substantially different tasks these files are +used for. The contents of those bold listed files directly influence the +application. Source files will produce the code to be run, others will provide +necessary data or documentation. These files must be maintained and orderly +processed in the build stages by the project, hence they are called +<emphasis>project files</emphasis>.</para> + +<para>If you have a look at the lower <guilabel>Automake Manager</guilabel> +window to the right of the workspace area you will find all project files listed +as well. The &automanag; tool uses this knowledge to take care of the build +control as we shortly will see.</para> + +<para>The other, non-bold listed files are of more auxiliary nature. They belong +to several distinctive classes as follows:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>Project Build Control</title> +<para>These files control the compile, install, documentation building, &etc; +processes. If the project utilizes the &GNU; +<application>autotools</application> machinery as our example does, you will +find a <filename>Makefile.am</filename> file in each project directory. These +are kind of basic make core files which contain build control commands and will +be processed in conjunction with various <filename>configure</filename> files +during the build stages. Such a build produces a final +<filename>Makefile</filename> in every directory. And from these in turn the +<application>make</application> utility will finally build the binaries of the +application.</para> +</formalpara> + +<para>Those <filename>Makefile.am</filename> files need to be maintained +throughout the development process. Luckily, &kdevelop; relieves you of most of +this burden by the &automanag; tool, which basically is a graphical front end to +maintain <filename>Makefile.am</filename> contents.</para> + +<para>Other project build control files currently listed are +<filename>configure.in.in</filename> and <filename>subdirs</filename> in the +project root directory. They will be processed by some of the files in the +<filename class="directory">admin</filename> &kde; specific administration +directory to produce more <filename>configure</filename> and +<filename>Makefile</filename> type files and finally the application's +binaries.</para> +</listitem> + +<listitem> +<formalpara> +<title>&kdevelop; Control Files</title> +<para>&kdevelop; needs some control and administration data on its own. These +are located in the project root directory, in our example +<filename>hello.kdevelop</filename>, <filename>hello.kdevelop.pcs</filename>, +and <filename>hello.kdevses</filename>.</para> +</formalpara> + +<para>Of particular importance in each project is the +<filename>xxx.kdevelop</filename> (where <quote>xxx</quote> denotes the project +name) file. It is the main <emphasis>KDevelop 3 Project File</emphasis> and +needed if you later want load this project into the &IDE;.</para> + +<warning> +<para>Never do manually modify, rename, or even delete any of these &kdevelop; +control files! The &IDE; will most likely not function properly on your project +afterwards.</para> +</warning> +</listitem> + +<listitem> +<formalpara> +<title>GNU Project Description Files</title> +<para>Some files in the project root directory are mandatory in any &GNU; +conformant application. These are: <filename>AUTHORS</filename>, +<filename>ChangeLog</filename>, <filename>INSTALL</filename>, +<filename>COPYING</filename> (which contains the GNU GENERAL PUBLIC LICENSE), +<filename>INSTALL</filename>, <filename>NEWS</filename>, +<filename>README</filename>, and <filename>TODO</filename>.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Other Files</title> +<para>A few more files, not mentioned yet, are:</para> +</formalpara> + +<itemizedlist> +<listitem> +<para><filename>Doxyfile</filename> controls the creation of the project +specific &API; internal programming interface documentation.</para> +</listitem> + +<listitem> +<para>The <filename class="directory">templates</filename> directory containes +file templates the &IDE; uses as stubs to create new source files. +You may at any time edit these templates. The new contents will be reflected in +the next source files you create of the related types.</para> + +<para>You may ⪚ want to realign the right hand stars in the copyright lines +the &appwizard; inserted into the <filename>cpp</filename> and +<filename>h</filename> template files, so the source files created from them +will look less awkward.</para> +</listitem> + +<listitem> +<para>The <filename class="directory">po</filename> directory will be used for +localization purposes. It is essentially part of the project files (contains a +<filename>Makefile.am</filename>) but will mainly be used in translation +processing. Not of main interest to the application developer, however.</para> +</listitem> + +<listitem> +<para>Finally, the <filename class="directory">admin</filename> directory is +specially needed in &kde; oriented applications. It provides a whole bunch of +files necessary to maintain the application's sources and binaries so they +will integrate properly into the &kde; environment.</para> +</listitem> +</itemizedlist> + +</listitem> +</itemizedlist> +</sect3> +</sect2> + +<sect2 id="gettingstarted-new-toolviews"> +<title>Additional Tool Views</title> + +<para>As you will have noticed, as soon as the &appwizard; had the new project +ready, several additional tool views were provided. These make sense during +project development only and, in short, provide the following +functionality.</para> + +<note> +<para>The tool views actually visible depend on the plugins currently loaded +into &kdevelop;. There are ways to control this. See the <link +linkend="setup-plugins">Plugin Tools</link> chapter for instructions.</para> +</note> + +<sect3 id="gettingstarted-new-toolviews-left"> +<title>Navigation and Selection Tools (left side)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title>Bookmarks</title> +<para>You can mark any text file line in order to quickly return to this +position from everywhere. &kdevelop; will remember all those +<emphasis>bookmarks</emphasis>, even if you close the editor window afterwards. +The <guilabel>Bookmarks</guilabel> tool view lists all those bookmarks by file +name and line number. You need only click such an entry to open the editor +window accordingly and position the cursor on that line.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Classes</title> +<para>Lists classes, methods, &etc; known in the project. Clicking the entry +opens the appropriate header or source file in an editor window and positions +the cursor at the respective declaration or definition.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>File Groups</title> +<para>Sorts the files in the projects into various utility groups, &ie; Sources, +User Interface, Icons, Translations, and Others. Clicking an entry opens that +file in an editor window.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Variables</title> +<para>This is used by the debugger tool to display, evaluate, and watch +variables during debug runs.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-toolviews-bottom"> +<title>Messages (bottom)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title>Valgrind</title> +<para><application>Valgrind</application> is a run-time program analyzer. This +tool view lists the results of such an analyze run. It is used ⪚ to find +memory leaks.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Security Problems</title> +<para>There is a <guilabel>Security Checker</guilabel> plugin tool for +&kdevelop;. It analyzes the currently edited source file for several common +security problems which may occur in the application and notifies the user in +this tool view window.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Breakpoints</title> +<para>This tool view allows to explicitly set, clear, and manage debug +breakpoints in the application source files. It is used in conjunction with the +debugger.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>CTags</title> +<para>Allows to create a database of identifier indexes using the popular +<application>CTags</application> application. This tags database may then be +used from out this tool view window to look up any needed identifier in the +project sources. Clicking a thus found item line will open an editor window and +position the cursor on the appropriate identifier there.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Problems</title> +<para>&kdevelop; keeps track of common programming problems in the currently +edited source file and notifies the user in this tool view window.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-new-toolviews-right"> +<title>Source Management (right side)</title> + +<itemizedlist> +<listitem> +<formalpara> +<title>Automake Manager</title> +<para>The &automanag; tool is basically a graphical front end to maintain the +contents of the <filename>Makefile.am</filename> files located in each project +directory. This tool view uses two windows to control its work. The upper window +mirrors part of the project subdirectories, namely those which explicitly +contain <emphasis>project files</emphasis>. Each subdirectory of this kind must +contain a <filename>Makefile.am</filename> file and is termed a +<emphasis>subproject</emphasis> in the &automanag; context.</para> +</formalpara> + +<para>Clicking a subproject entry opens a suitable display of the project files +in this subproject in the lower window. The files listed there will be grouped +according to their <filename>Makefile.am</filename> functionality in this +subproject.</para> + +<para>The &automanag; is a very powerful tool to manage the project and its +subprojects as well as the roles project files play in building the application. +We will have a short look at a few major details <link +linkend="gettingstarted-extend-automake">below</link>. See the <link +linkend="project-management">Building and Project Management</link> chapter for +a more extensive description.</para> +</listitem> +</itemizedlist> +</sect3> +</sect2> +</sect1> + + +<sect1 id="gettingstarted-edit"> +<title>Some Tips About Dealing With Documents</title> + +<para>In our example project the &appwizard; did leave the +<filename>hello.cpp</filename> file open in an editor window, so you can +immediately start working. Now, we may well assume your are knowledgeable about +using an editor, so we do not need talk much about this here. But there are some +handy &kdevelop; specifics about dealing with such tabbed editor windows and the +documents you are working on. We will have a short look at some of them, +namely:</para> + +<simplelist> +<member><link linkend="gettingstarted-edit-headers">How to easily switch between +header and implementation files.</link></member> +<member><link linkend="gettingstarted-edit-defs">How to quickly access +declarations and definitions.</link></member> +<member><link linkend="gettingstarted-edit-arrange">How to arrange editor +windows to your current needs.</link></member> +<member><link linkend="gettingstarted-edit-problems">How to keep an eye on +common problems.</link></member> +</simplelist> + +<sect2 id="gettingstarted-edit-headers"> +<title>Switching Between Header and Implementation Files</title> + +<para>&kdevelop; provides a quick and easy way to switch from a given +implementation (<filename>.cpp</filename>) file to the corresponding header +(<filename>.h</filename>) file and vice versa. Just right click into the editor +window you want to switch. A menu similar to the following will pop up.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-switch-header.png" format="PNG"/> +</imageobject> +<caption><para>How to switch between implementation and header +files.</para></caption> +</mediaobject> +</screenshot> + +<para>Find the <guimenuitem>Switch header/implementation</guimenuitem> entry and +select it. &kdevelop; will look up the corresponding header or implementation +file and open it in another editor window. In our example, if you did right +click into the <filename>hello.cpp</filename> source, the +<filename>hello.h</filename> file will be displayed and the cursor positioned +there.</para> + +<para>There is even more. If you do right click inside the text of a class +implementation, &kdevelop; will position the cursor on the corresponding +declaration line in the header file. And vice versa, right clicking on a +declaration line will bring you to the corresponding class +implementation.</para> + +<para>If the editor window with the file to be switched to already exists, +&kdevelop; will of course activate this one and reposition the cursor there if +necessary.</para> +</sect2> + +<sect2 id="gettingstarted-edit-defs"> +<title>How to Access Declarations and Definitions</title> + +<para>But what if you are working on a source file and want to look up the +declaration or definition of an identifier you just found there? Well, this is +equally easily accomplished. Basically all you need to do is to right click on +the identifier in question.</para> + +<para>There are two different cases to consider, however, namely:</para> +<simplelist> +<member><link linkend="gettingstarted-edit-defs-external">Accessing externally +defined identifiers</link>, and</member> +<member><link linkend="gettingstarted-edit-defs-project">dealing with project +internal text items</link>.</member> +</simplelist> + +<sect3 id="gettingstarted-edit-defs-external"> +<title>External Declarations and Definitions</title> + +<para>In a most common case you want to look up an identifier which was defined +externally to your project. In &kde; projects such identifiers are most likely +documented in various &kde; or &Qt; libraries. If &kde; and &kdevelop; were +properly installed, &kdevelop; will be able to access such so-called API +documentation and be able to search it for identifiers of this kind.</para> + +<para>Let us look at an example. In the <filename>hello.cpp</filename> editor +window find the following lines.</para> + +<programlisting> +Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ +</programlisting> + +<para>Right click on <classname>KMainWindow</classname>. +A menu will pop up. There select the <guimenuitem>Search in Documentation: +KMainWindow</guimenuitem> entry and release the mouse button. Now the +<guilabel>Documentation</guilabel> tool view will open, showing the +<classname>KMainWindow</classname> entry as search item on the +<guilabel>Search</guilabel> sub-page. And a short while after another editor +window will open in the workspace area, showing the KDE API Reference page of +the <classname>KMainWindow</classname> class.</para> + +<para>This all will look like the following. (We deliberately opened the +<guilabel>Documentation</guilabel>, <guilabel>Search</guilabel> page already to +illustrate the result of the menu selection.)</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-search-doc.png" format="PNG"/> +</imageobject> +<caption><para>How to look up an externally documented +identifier.</para></caption> +</mediaobject> +</screenshot> + +<para>You might as well select <guimenuitem>Find Documentation: +KMainWindow</guimenuitem>. In this case the <guilabel>Finder</guilabel> sub-page +of the <guilabel>Documentation</guilabel> tool view will show up, usually +providing a selection of pages containing the search term. (In our example this +will probably be the <classname>KMainWindow</classname> and +<classname>KMainWindowInterface</classname> classes. Select the one you are +interested in and the corresponding documentation will be displayed in an editor +window.</para> + +<note> +<para>If this did not work, then there is probably no documents index yet. Did +you initialize the indexes as shown <link +linkend="gettingstarted-configure-search">above</link>? If not, please do so, +then come back here and try again.</para> +</note> +</sect3> + +<sect3 id="gettingstarted-edit-defs-project"> +<title>Project Internal Declarations and Definitions</title> + +<para>Such search facilities in external documentation have their limitations, +however. Of course one cannot look up an identifier externally if it is only +defined and used inside the current project. But there is help. &kdevelop; can +use indexes built by the <application>CTags</application> application to search +the sources in your project.</para> + +<para>Before we can use this on our Hello example project, we must however first +generate a suitable index. This is done by the <guilabel>CTags</guilabel> tool +view at the bottom of the workspace area.</para> + +<para>When you click the <guibutton>CTags</guibutton> tab, a dialog window will +open where you will find the following key in the lower right corner.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-regenerate.png" format="PNG"/> +</imageobject> +<caption><para>Build a CTags index with the <guibutton>Regenerate</guibutton> +key.</para></caption> +</mediaobject> +</screenshot> + +<para>Press the <guibutton>Regenerate</guibutton> button and wait a few seconds. +Then the <guilabel>No CTags Database Found</guilabel> will be replaced by the +current date. Now you are ready to perform some identifier look ups in your +project source.</para> + +<tip> +<para>The date next to the <guilabel>Regenerate</guilabel> button is there to +remind you of possibly too old indexes. Whenever you are obviously not able to +look up some identifier in your project, consider regenerating the index. On +large projects this might take considerable time, but you should make it a habit +to regenerate the index regularly after extensive source file changes.</para> +</tip> + +<para>To look up an identifier in your project sources there are several +possibilities.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>Use the CTags tool view</title> +<para>This is easy. +Just start typing the identifier name you are interested in into the +<guilabel>Lookup</guilabel> input field in the bottom left. &kdevelop; will try +to complete the word you have typed so far and show all occurrences of those +identifiers which start with this character sequence.</para> +</formalpara> + +<para>If for example you want to know wherever the <quote>Hello</quote> +identifier was used in our example project, type an "H" into the +<guilabel>Lookup</guilabel> input field. &kdevelop; will immediately start +working and present you a result like this:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-lookup.png" format="PNG"/> +</imageobject> +<caption><para>How to look up an identifier in the <guilabel>CTags</guilabel> +tool view.</para></caption> +</mediaobject> +</screenshot> + +<para>If you click one of the listed entries, &kdevelop; will open an editor +window with this file and position the cursor on the appropriate place.</para> +</listitem> + +<listitem> +<formalpara> +<title>Use a context menu in a source file</title> +<para>This is handy while you are working on a certain source file. +Assume you are studying the <filename>main.cpp</filename> file of our Hello +example project. There you find the following line</para> +</formalpara> +<programlisting> + Hello *mainWin = 0; +</programlisting> +<para>and wonder whatever the <quote>Hello</quote> was used for in the program. +To find out, simply right click on this Hello identifier. A menu will pop up in +response to this right mouse click, featuring the following lines near the +bottom.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-ctags-menu.png" format="PNG"/> +</imageobject> +<caption><para>Getting <application>CTags</application> information on a project +internal identifier.</para></caption> +</mediaobject> +</screenshot> + +<para>Click what you are interested in, say <guilabel>CTags - Go to Definition: +Hello</guilabel>, and &kdevelop; will immediately open the +<filename>hello.cpp</filename> editor window and position the cursor right in +front of this class definition:</para> +<programlisting> +Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ +</programlisting> +</listitem> + +<listitem> +<formalpara> +<title>Do a global search</title> +<para>This is especially useful if you want to look up arbitrary text in your +project source. There are two possibilities to start a global search from within +&kdevelop;.</para> +</formalpara> +<itemizedlist> +<listitem> +<para>Start a global search from the <menuchoice><guimenu>Edit</guimenu> +<guimenuitem>Find in Files...</guimenuitem></menuchoice> menu. +Or</para> +</listitem> +<listitem> +<para>Directly make use of the context menu with a right mouse click in the +editor window.</para> +</listitem> +</itemizedlist> + +<para>We will illustrate the second possibility on our Hello example project. +The outcome of the menu call will essentially be the same. Let us assume you are +studying the <filename>hello.cpp</filename> source file and have the cursor +positioned on the first Hello occurrence there. Now you wonder, where this one +word <quote>Hello</quote> was used in the project source and how many +occurrences there are. This is a typical case where to use &kdevelop;'s +global search facilities.</para> + +<para>Now, still keeping the cursor somewhere on this <quote>Hello</quote> in +the source text, click the right mouse button. The now well known context menu +will pop up, where you should select the <guilabel>Grep: Hello</guilabel> +line.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="editor-find-menu.png" format="PNG"/> +</imageobject> +<caption><para>Initiating a global search from within an editor +window.</para></caption> +</mediaobject> +</screenshot> + +<para>This will pop up the following <guilabel>Find in Files</guilabel> dialog +(exactly the same as if you did use the <menuchoice><guimenu>Edit</guimenu> +<guimenuitem>Find in Files...</guimenuitem></menuchoice> menu).</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="find-in-files.png" format="PNG"/> +</imageobject> +<caption><para>A versatile graphical front end to perform global searches in the +project.</para></caption> +</mediaobject> +</screenshot> + +<para>As you see, this is a very versatile tool to initiate +<application>find</application>-and-<application>grep</application> searches +throughout your project. We won't delve further into details here, but you +may want to experiment with this facility on your own. For the moment, there +should be our <quote>Hello</quote> be preselected in the +<guilabel>Pattern</guilabel> field. If it is not, just type it in, then press +the <guibutton>Search</guibutton> button at the bottom right.</para> + +<para>Now the <guilabel>Find in Files</guilabel> tool view will open at the +bottom, showing you file names and lines of all literal occurrences of +<quote>Hello</quote> in our example project. As usual, if you click an entry, +&kdevelop; will get you to exactly that position in an editor window in the +workspace area.</para> + +<para>There are two lines of special interest in the tool view window.</para> +<itemizedlist> +<listitem> +<para>Right on top you will find the command sequences &kdevelop; did actually +use to perform the search. This will be useful to more precisely control the +search outcome.</para> +</listitem> + +<listitem> +<para>On bottom the number of occurrences found in these search run will be +listed. In our example this should read <quote>*** 11 matches found +***</quote>.</para> +</listitem> +</itemizedlist> + +<para>&kdevelop; will remember these search results throughout the currently +running session. If you initiate another global search, its results will display +in another tabbed window in the <guilabel>Find in Files</guilabel> tool view +window.</para> +</listitem> +</itemizedlist> +</sect3> +</sect2> + +<sect2 id="gettingstarted-edit-arrange"> +<title>Arranging Editor Windows</title> + +<para>When your work with large complex projects you will often end up with +quite a lot of tabbed editor windows residing on the tab bar. This makes +specific facilities to clean up, order, and group all those editor tabs +necessary. &kdevelop; provides several means for this. We will have a short look +at some of them.</para> +<simplelist> +<member><link linkend="gettingstarted-edit-arrange-clean">How to remove unneeded +tabs.</link></member> +<member><link linkend="gettingstarted-edit-arrange-tabs">How to rearrange the +tabs.</link></member> +<member><link linkend="gettingstarted-edit-arrange-split">How to view several +files simultaneously in the workspace area.</link></member> +<member><link +linkend="gettingstarted-edit-arrange-sourceheader">How to edit +C++ source and header files simultaneously</link></member> +<member><link linkend="gettingstarted-edit-arrange-group">How to group source +files into development sessions.</link></member> +</simplelist> + +<sect3 id="gettingstarted-edit-arrange-clean"> +<title>Cleaning up the Tabs Row</title> + +<para>If the vast amount of editor window tabs becomes badly arranged at all, +you usually may want to close all those tabs you really do not need any more. +&kdevelop; provides several facilities to do so, the usual way of bulk closing +open editor windows and a more specific approach where you can expressly command +which ones to close and which to keep open.</para> + +<formalpara> +<title>Closing Several Tabs At Once</title> +<para>This is kind of a bulk approach to close unnecessarily open tabs which you +may find in other &kde; applications as well. You can use the +<guimenu>Window</guimenu> menu or right click on a tab to either</para> +</formalpara> +<itemizedlist> +<listitem> +<para>close the currently selected editor window,</para> +</listitem> +<listitem> +<para>close all other open editor windows, or</para> +</listitem> +<listitem> +<para>close all editor windows at once (available from the +<guimenu>Window</guimenu> menu only).</para> +</listitem> +</itemizedlist> + +<formalpara> +<title>Closing Selected Sets of Tabs</title> +<para>The step-by-step approach of closing individual editor window tabs can +become awkward if there are a great number of tabs from which you want to still +keep several open. Instead of searching and closing one editor window tab after +another &kdevelop; provides a means to select the candidates from a list and +close those, and only those, with one single mouse click.</para> +</formalpara> + +<para>Let us illustrate this on a simple example. +In our Hello example project let us assume there were several files open for +edit: <filename>hello.cpp</filename>, <filename>hello.h</filename>, +<filename>helloui.rc</filename>, <filename>hello.desktop</filename>, and +<filename>main.cpp</filename>. Now you want to close all of them except +<filename>hello.cpp</filename> and <filename>hello.h</filename>. The easiest way +to do so is with the <guilabel>File List</guilabel> tool view. Because this list +of open files is alphabetically ordered you can more easily find the ones you +want to be closed. Proceed as follows:</para> + +<procedure> +<step> +<para>Open <guilabel>File List</guilabel> and, with the <keycap>Ctrl</keycap> +key held down, click the files you want to be closed in the list.</para> +</step> +<step> +<para>Then, keeping the mouse pointer on a file name in the list, click the +right mouse button.</para> +</step> +<step> +<para>From the <guimenu>File List</guimenu> popup menu select <guimenuitem>Close +Selected</guimenuitem>.</para> +</step> +</procedure> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-close-selected.png" format="PNG"/> +</imageobject> +<caption><para>How to close selected editor windows in one +step.</para></caption> +</mediaobject> +</screenshot> +<para>That was all. +&kdevelop; will have closed all editor windows at your wish, and you are ready +to proceed with a clean tab bar again.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-tabs"> +<title>How to Rearrange Edit Window Tabs</title> + +<para>Even if you have only the really necessary editor windows open you may +still want to have their tabs arranged in some logical way. &kdevelop; provides +some common means to do so, in short:</para> + +<formalpara> +<title>Basic Setup — Where to Position New Tabs</title> + +<para>By default, when you open a new editor window, its tab will be inserted to +the right of the editor window tab currently in use. This can be changed so that +the new tab will open to the far right on the tab bar.</para> +</formalpara> +<para>You must change a basic user interface setting in &kdevelop; to enable +this behavior.</para> +<procedure> +<step> +<para>Select <menuchoice><guimenu>Settings</guimenu> <guimenuitem>Configure +KDevelop...</guimenuitem></menuchoice></para> +</step> +<step> +<para>In the left hand icon bar on the dialog popup click the <guilabel>User +Interface</guilabel> icon. The <guilabel>User Interface</guilabel> dialog page +will be now shown.</para> +</step> +<step> +<para>In the left bottom corner there find the section labeled <guilabel>Tabbed +Browsing</guilabel>. Remove the check mark on the <guilabel>Open new tab after +current tab</guilabel> line.</para> +</step> +<step> +<para>Close &kdevelop; and restart it again. Now the new editor window tabs will +open at the far right end of the current tabs row.</para> +</step> +</procedure> + +<para>Unfortunately, this setting cannot be changed on the fly during a +development session. You must make up your mind which behavior you prefer in the +long run and then stick to it, at least until the next start of +&kdevelop;.</para> + +<formalpara> +<title>How to Rearrange the Tabs</title> +<para>As development tasks do vary over time, the need to rearrange the tabbed +editor windows will more or less often arise. This is easily accomplished in +&kdevelop;.</para> +</formalpara> +<para> +Just click the tab you want to move with the middle mouse button and move the +mouse a short distance. The cursor will change to a crossed-arrow pattern. You +can now drag this tab, holding the middle mouse button down, until it did skip +into the place where you want it to be.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-split"> +<title>Viewing Several Files Simultaneously</title> + +<para>At first sight there is always at most one single editor window open to +work on a source file. Although you may fast switch the tabbed windows, there +are times where you want have several files open at once, ⪚ for reference +purposes or to keep complex tasks under better control. To accomplish this, +&kdevelop; provides a way to split the workspace area into different, +simultaneously visible sections which each can hold their own series of tabbed +windows.</para> + +<para>There are two split commands which you can reach either through the +<guimenu>Window</guimenu> menu or by right clicking either into a tabbed window +or on the window tab itself. We will illustrate this splitting behavior again +with our Hello example project.</para> + +<para>Assume there are two source files open on the tab bar, +<filename>hello.cpp</filename> and <filename>hello.h</filename>. Now, while +working on the <filename>hello.cpp</filename> source, you often need to refer to +the declarations in the <filename>hello.h</filename> headers file, so you want +to keep both files open simultaneously.</para> + +<para>To get this done, right click on the tab of, say, +<filename>hello.h</filename>. The following menu will then pop up.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-workspace.png" format="PNG"/> +</imageobject> +<caption><para>How to split the current workspace area into two +parts.</para></caption> +</mediaobject> +</screenshot> + +<para>Select the <guimenuitem>Split Horizontal</guimenuitem> entry. This will +split the current workspace area in the middle and move the tabbed editor window +holding the <filename>hello.h</filename> file into the lower part.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-windows.png"/> +</imageobject> +<caption><para>The workspace has been split horizontally.</para></caption> +</mediaobject> +</screenshot> + +<para>Note the dotted separator line between both windows. You can grab it with +the mouse and adjust the heights of the editor windows according to your +needs.</para> + +<para>There are a few points to note.</para> +<itemizedlist> +<listitem> +<para>The split workspace areas are fully functional at their own. This means, +new tabbed windows will open in the workspace which contains the currently +active editor window. And you can split any sub-area again to your wish, thus +keeping as much windows open simultaneously as you need.</para> +</listitem> + +<listitem> +<para>Any split will move the currently active editor window into the new +workspace sub-area, either downward or to the right. The other tabbed windows +all remain where they were. You cannot directly move tabbed windows between +split areas, instead you need to explicitly close the window in one workspace +area and reopen it in another to regroup.</para> +</listitem> + +<listitem> +<para>Also, there is no direct way to close a split area again. +It closes automatically, once the last tabbed window in it was closed.</para> +</listitem> +</itemizedlist> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-sourceheader"> +<title>Edit C++ Source and Header Files Simultaneously</title> + +<para>There is a neat application of the above mentioned workspace split +feature built into &kdevelop;. It allows to automatically keep a +<filename>.cpp</filename> source and its accompanying +<filename>.h</filename> header file side by side open in the workspace area. +And, optionally, it allows to work on both files synchronously, such that if +you select a declaration in the header file &kdevelop; will navigate to the +respective definition in the source file and vice versa.</para> + +<para>This feature is however deactivated by default. If you want to use it in +your project you need to activate it.</para> + +<para>Select <menuchoice><guibutton>Project</guibutton> +<guimenuitem>Project Options</guimenuitem></menuchoice>. The +<guilabel>Project Options</guilabel> dialog will pop up. In the left hand icon +bar there select <guiicon>C++ Support</guiicon> and subsequently the +<guilabel>Navigation</guilabel> tab on the dialog page which will display on +the right side.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-source-header.png" format="PNG"/> +</imageobject> +<caption><para>Have C++ source and header files be displayed side by +side.</para></caption> +</mediaobject> +</screenshot> + +<para>Now check the <guilabel>Enable split of Header/Source files</guilabel> +box. This will enable <guilabel>Automatic Synchronize</guilabel> +and <guilabel>Vertical</guilabel> by default. Keep these settings for now and +press <guibutton>OK</guibutton>.</para> + +<para>To illustrate this feature, now close in our example Hello project +both the <filename>hello.cpp</filename> and <filename>hello.h</filename> editor +windows, if necessary. Then select <filename>hello.cpp</filename> again from the +<filename class="directory">src</filename> subdirectory of the project. The +editor window will open as usual. But if you now open the +<filename>hello.h</filename> belonging to it, &kdevelop; will automatically +split the workspace and open this header file editor window just beneath the +<filename>hello.cpp</filename> window.</para> + +<para>There is even more, as we mentioned already. In the +<filename>hello.cpp</filename> editor find ⪚ this constructor definition +line:</para> +<programlisting> +Hello::Hello() +</programlisting> +<para>and put the cursor there. Then look at the <filename>hello.h</filename> +window below and note how &kdevelop; did navigate to the corresponding default +constructor declaration line.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="split-source-header-navigate.png" format="PNG"/> +</imageobject> +<caption><para>&kdevelop; automatically navigated to the constructor +declaration.</para></caption> +</mediaobject> +</screenshot> + +<para>This works vice versa as well. Whenever you put the cursor somewhere into +a construct in one editor window, &kdevelop; will navigate to the corresponding +construct in the other.</para> +</sect3> + +<sect3 id="gettingstarted-edit-arrange-group"> +<title>Grouping Source Files Into Development Sessions</title> + +<para>When your project grows larger, and the development tasks become more and +more complex and force you to often switch between different, even distinct sets +of files, it is about time to organize your development work into distinct +sessions. The <guilabel>File List</guilabel> tool view of &kdevelop; allows you +do to just this.</para> + +<para>On top of the <guilabel>File List</guilabel> tool view window there is a +tool bar where you can create, save, select, and remove such sessions. Or +alternatively use the <menuchoice><guimenu>View</guimenu> <guimenuitem>View +Sessions</guimenuitem></menuchoice> sub-menu.</para> + +<para>We will illustrate this facility again with our Hello example project. +Assume you want to always open the <filename>hello.cpp</filename>, +<filename>hello.h</filename>, and <filename>main.cpp</filename> files all in one +step, no matter what development task you just did perform in the project. To +accomplish this, you first need to create a new development session named, say, +<quote>sources</quote>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-session-create.png" format="PNG"/> +</imageobject> +<caption><para>Use development sessions to remember groups of +files.</para></caption> +</mediaobject> +</screenshot> + +<para>This is a multiple step approach as follows.</para> +<procedure> +<step> +<para>Create a new session</para> +<substeps> +<step> +<para>Click the <guiicon>New Session</guiicon> icon top left in the +<guilabel>File List</guilabel> tool view window.</para> +</step> +<step> +<para>A dialog will pop up. In the <guilabel>Enter the name of the +session</guilabel> input field give your new session a name, ⪚ +<quote>sources</quote>.</para> +</step> +<step> +<para>Close the dialog with <guibutton>OK</guibutton>. The new session will now +be listed in the drop down box on the toolbar.</para> +</step> +</substeps> +</step> +<step> +<para>This new session will initially be empty. You must populate it with the +files you want to be kept there.</para> +<substeps> +<step> +<para>Open all files you want to be grouped in this development session. In our +example we decided to keep <filename>hello.cpp</filename>, +<filename>hello.h</filename>, and <filename>main.cpp</filename> there as +planned.</para> +</step> +<step> +<para>Once your file list is complete, click the <guiicon>Save Session</guiicon> +icon in the toolbar. Do not skip this step, &kdevelop; will forget the file list +otherwise.</para> +</step> +</substeps> +</step> +</procedure> + +<para>That was it. Whenever you select the <guilabel>sources</guilabel> session +from the <guilabel>Open Session</guilabel> drop down box, &kdevelop; will close +all currently open editor windows and open the remembered ones +(<filename>hello.cpp</filename>, <filename>hello.h</filename>, and +<filename>main.cpp</filename> in our example) instead.</para> + +<para>You can define as many sessions as you wish in the context of your +project. If you want to change the session's contents, just update the +remembered file list with a <guiicon>Save Session</guiicon> click. And if you +want get rid of a session, select it in the drop down box, then click the +<guiicon>Delete Session</guiicon> icon in the toolbar right.</para> + +<para>There is even more. You can force &kdevelop; to open a given session by +default when it loads the project. Just select the session in the drop down box +on the <menuchoice><guimenu>Projects</guimenu> <guimenuitem>Project +Options</guimenuitem> <guimenuitem>File List</guimenuitem></menuchoice> project +options configuration page.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="file-list-session-default.png" format="PNG"/> +</imageobject> +<caption><para>Let &kdevelop; open a specific session when the project is +loaded.</para></caption> +</mediaobject> +</screenshot> +</sect3> +</sect2> + +<sect2 id="gettingstarted-edit-problems"> +<title>Keeping an Eye on Common Problems</title> + +<para>When you open an editor window containing a source file, &kdevelop; will +parse its contents. This allows the built in <emphasis>problem +reporter</emphasis> to scan the source text for some common errors it knows of. +And it can alert the user of different places which have been marked for special +treatment.</para> + +<para>Let us illustrate this facility with our Hello example project.</para> + +<itemizedlist> +<listitem> +<para>Open an editor window with the <filename>main.cpp</filename> source +file.</para> +</listitem> + +<listitem> +<para>Make sure it still contains the following line somewhere towards the +end:</para> +<programlisting> + /// @todo do something with the command line args here +</programlisting> +<para>This was inserted by the &appwizard; when you created the Hello project in +the <link linkend="gettingstarted-new">Starting a New Project</link> chapter +above.</para> +</listitem> + +<listitem> +<para>Now open the <guilabel>Problems</guilabel> tool view in the bottom tabs +row. If all went right, it will currently report this todo:</para> +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-todo.png"/> +</imageobject> +<caption><para>&kdevelop; is alerting a source code line containing a todo +mark.</para></caption> +</mediaobject> +</screenshot> +</listitem> +</itemizedlist> + +<para>The format of the <computeroutput>/// @todo</computeroutput> command is +for special treatment by the <application>Doxygen</application> code documenter, +which we will look at briefly in the <link +linkend="gettingstarted-doc">Documentation</link> section below. It is not +mandatory that you use this format, the more common +<computeroutput>TODO</computeroutput> and <computeroutput>FIXME</computeroutput> +comment marks will be recognized as well.</para> + +<para>If you ⪚ insert the following <computeroutput>TODO</computeroutput> and +<computeroutput>FIXME</computeroutput> comment lines in our +<filename>hello.cpp</filename> example file</para> +<programlisting> +Hello::Hello() + : KMainWindow( 0, "Hello" ) +{ + // set the shell's ui resource file + // TODO check the user interface + setXMLFile("helloui.rc"); + + // FIXME change to a better suited greeting + new QLabel( "Hello World", this, "hello label" ); +} +</programlisting> +<para>you will find them listed in the <guilabel>Problems</guilabel> tool view +as well:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-marks.png" format="PNG"/> +</imageobject> +<caption><para>The problem reporter listing lines which require attention in the +currently edited file.</para></caption> +</mediaobject> +</screenshot> + +<para>Note the other tabs in the <guilabel>Problem</guilabel> reporter tool view +window, especially <guilabel>Fixme</guilabel>, and <guilabel>Todo</guilabel>. If +you open them, you will find all <computeroutput>FIXME</computeroutput> and +<computeroutput>TODO</computeroutput> marked lines, &kdevelop; has found so far +in this session. For example the <computeroutput>TODO</computeroutput> alerts +will currently look thus:</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="problem-report-all-todos.png" format="PNG"/> +</imageobject> +<caption><para>The problem reporter has collected the +<computeroutput>TODO</computeroutput> alerts.</para></caption> +</mediaobject> +</screenshot> + +<para>The <guilabel>Errors</guilabel> tab will however not list every coding +error you make. This is the job of other tools in ⪚ the build process. But +you will find here alerts of some common programming mistakes which would likely +go unnoticed otherwise and probably be catched with difficulties during complex +debugging session.</para> + +<para>You will find the &kdevelop; problem reporter facility a very valuable +tool, so check the <guilabel>Problems</guilabel> tool view regularly in the +development process.</para> +</sect2> +</sect1> + +<sect1 id="gettingstarted-compile"> +<title>How to Compile a Project</title> + +<para>Compiling a project in &kdevelop; requires several setup steps and then +building the application. All these are available through the +<guimenu>Build</guimenu> menu.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-menu.png" format="PNG"/> +</imageobject> +<caption><para>Building a project requires several steps.</para></caption> +</mediaobject> +</screenshot> + +<para>We are interested for now in the upper section only of this menu. The +entries there are sorted in order of their importance. Thus the most often +needed command is on top, the <guimenuitem>Build Project</guimenuitem> entry, +which will cause all of the project be initialized, compiled and linked as +needed. Other entries are there to compile selected project portions or a single +file only, to perform several initialization sequences, or to install the +completed application binaries.</para> + +<para>For now we will concentrate on several facilities which &kdevelop; +provides for project setup, initializing, building, and running an application. +In general, this includes:</para> + +<simplelist> +<member><link linkend="gettingstarted-compile-basic">Looking briefly at the +basic build cycle.</link></member> +<member><link linkend="gettingstarted-compile-setup">Looking at some basic +means to configure a project.</link></member> +</simplelist> + +<sect2 id="gettingstarted-compile-basic"> +<title>The Basic Build Cycle</title> + +<para>Once you created a new project you usually want to check if everything +went right so far. This implies a first build and test run of the application, +which we will do now. In order to initially compile a project there are several +steps to perform, which we will briefly look at.</para> +<simplelist> +<member><link linkend="gettingstarted-compile-basic-init">How to initialize the +project for a first build.</link></member> +<member><link linkend="gettingstarted-compile-basic-config">How to do the +initial configuration.</link></member> +<member><link linkend="gettingstarted-compile-basic-build">How to build the +project.</link></member> +<member><link linkend="gettingstarted-compile-basic-run">How to run the +application from within &kdevelop;.</link></member> +</simplelist> + +<note> +<para>This discussion implies that your project is based on the &GNU; autotools, +which enabled the &automanag; tool in &kdevelop; as our example Hello project +does. If you created another type project, ⪚ for the &Qt; based +<application>QMake</application> project manager, there will be other facilities +available in the menus or perhaps even none of them. You will have to consult +the respective vendor documentation on project management and application +building in these cases.</para> +</note> + +<sect3 id="gettingstarted-compile-basic-init"> +<title>Initialize the Project for the Build</title> + +<para>When the &appwizard; created our Hello example project, it left it in a +sort of raw, <quote>virgin</quote> state. The &GNU; autotools chain dictates +several initialization steps to be performed before the application could be +actually compiled and linked. If you try to build a project in such a raw state, +⪚ by selecting the <menuchoice><guimenu>Build</guimenu> <guimenuitem>Build +Project</guimenuitem></menuchoice> menu or pressing the <keycap>F8</keycap> +function key, you will get the following warning.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="raw-project-warning.png" format="PNG"/> +</imageobject> +<caption><para>Trying to build a raw automake based project.</para></caption> +</mediaobject> +</screenshot> + +<para>You may press the <guibutton>Run Them</guibutton> button in which case +&kdevelop; will try to automatically run all required setup steps prior to +compiling and linking the application. But we will look at those initial steps +in sequence, so cancel the dialog by pressing <guibutton>Do Not run</guibutton>. +</para> + +<para>As mentioned already, compiling and linking the application is done +through the <guimenu>Build</guimenu> menu. Call it up and select +<guimenuitem>Run automake and friends</guimenuitem>.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-menu-automake.png" format="PNG"/> +</imageobject> +<caption><para>Initiating a basic initialization run.</para></caption> +</mediaobject> +</screenshot> + +<para> +&kdevelop; will now open the <guilabel>Messages</guilabel> tool view window at +the bottom and list a series of messages produced by several make tools. If +everything went right, the final line will read +<quote><computeroutput>*** Success ***</computeroutput></quote>.</para> + +<para>If you scroll back to the top, you will find the command line, &kdevelop; +issued to call up the tools beneath the surface:</para> + +<programlisting> +cd '/home/devel/projects/hello' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -f Makefile.cvs +</programlisting> + +<para>This basically tells that &kdevelop; first switched to the root directory +of our example project. Then it set up a dedicated environment, advising the +make system of the <application>autoconf</application> and +<application>automake</application> tool revisions used for this initialization. +And finally it instructed the make tool (&GNU; <application>gmake</application> +in this case) to process the <filename>Makefile.cvs</filename> make file.</para> + +<para>This make file was automatically set up when you created the Hello +project. It contains all the commands necessary to properly initialize the +project so the resulting application will run under &kde;. Especially this will +create the <filename>configure</filename> skript file necessary to perform the +next setup step.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-config"> +<title>Initial Hello Configuration</title> + +<para>Configuring means to tailor the build process to the hardware and software +peculiarities of your system. This is a basic requirement in build processes +based on the &GNU; autotools scheme as you probably will know.</para> + +<para>You can command a configure sequence once the basic automake +initialization has been successfully finished because only after this +initial run the necessary <filename>configure</filename> files will be +available. This done, select the <menuchoice><guimenu>Build</guimenu> +<guimenuitem>Run Configure</guimenuitem></menuchoice> menu entry to initiate a +configuration sequence.</para> + +<para>&kdevelop; opened the <guilabel>Messages</guilabel> tool view +window again if necessary and listed the messages of the configure run therein. +If all went right, the final messages will be <quote><computeroutput>Good - your +configure finished. Start make now</computeroutput></quote> (which was issued by +configure) followed by the &kdevelop; <quote><computeroutput>*** Success +***</computeroutput></quote> message.</para> + +<para id="gettingstarted-compile-basic-config-cmd">On top of the +<guilabel>Messages</guilabel> window you will again find +the command line, &kdevelop; used to initiate this configuration run:</para> + +<programlisting> +mkdir '/home/devel/projects/hello/debug' && \ +cd '/home/devel/projects/hello/debug' && \ +CXXFLAGS="-O0 -g3" "/home/devel/projects/hello/configure" --enable-debug=full +</programlisting> + +<para>You can tell several interesting details from these commands.</para> + +<informaltable frame="none"> +<tgroup cols="2"><tbody><row> +<entry> +<mediaobject> +<imageobject> +<imagedata fileref="tutorial-debug-tree.png"/> +</imageobject> +</mediaobject> +</entry> +<entry> +<itemizedlist> +<listitem> +<para>First, &kdevelop; uses a dedicated subdirectory in the project directory +tree for the build process. This <filename class="directory">debug</filename> +build directory (shown to the left) mirrors the basic project structure and +contains some set of build related files, such as several +<filename>configure</filename> based files and additionally a +<filename>Makefile</filename> in each subdirectory.</para> +</listitem> +<listitem> +<para>In the <link linkend="gettingstarted-compile-setup">Configuring the +Project</link> +section shortly below we will have a brief look at the motivations why +&kdevelop; uses separate build directories in cases like this one. For the +moment it is enough to know that &kdevelop; created this <filename +class="directory">debug</filename> directory — if necessary — prior +to the configure call and that the <filename>configure</filename> script did +build the sub structure and all the <filename>Makefiles</filename> in +there.</para> +</listitem> +<listitem> +<para>Next, from within the <filename class="directory">debug</filename> build +directory, &kdevelop; called the <filename>configure</filename> script in the +root directory of our project using a dedicated environment, where the +<computeroutput>CXXFLAGS="-O0 -g3"</computeroutput> flags will later signal the +&gcc; compiler that it should not optimize the resulting binaries and include +full debugging information with them.</para> +</listitem> +<listitem> +<para>Finally the <filename>configure</filename> script was called with the +<computeroutput>--enable-debug=full</computeroutput> option which instructs it +to create each <filename>Makefile</filename> so that later compilation and +linking will have all necessary debugging information be built in and +usable.</para> +</listitem> +</itemizedlist> +</entry> +</row></tbody></tgroup> +</informaltable> + +<para>All these settings are configurable on a per project basis. You will learn +more about this in the <link linkend="project-management">Project +Management</link> chapter.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-build"> +<title>Build the Project</title> + +<para>Once you got this far you will be ready to actually build, &ie; +compile and link the application. Looking at the <guimenu>Build</guimenu> menu, +there are three such compile options from which to select.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-commands.png" format="PNG"/> +</imageobject> +<caption><para>&kdevelop; commands to build binaries.</para></caption> +</mediaobject> +</screenshot> + +<para>Going from bottom to top, there are:</para> +<itemizedlist> +<listitem> +<para><guimenuitem>Compile File</guimenuitem> — This will compile the +source file in the currently open editor window. Mostly used for quick error +checks.</para> +</listitem> +<listitem> +<para><guimenuitem>Build Active Target</guimenuitem> — This is mainly used +in conjunction with the <link linkend="gettingstarted-extend-automake">Automake +Manager</link> which we will briefly look at below.</para> +</listitem> +<listitem> +<para><guimenuitem>Build Project</guimenuitem> — Now this is what we +currently are interested in. It will iterate over the whole project, compiling +and linking all files as necessary.</para> +</listitem> +</itemizedlist> + +<para>It might be interesting to watch what happens to the +<filename class="directory">Debug</filename> directory created in the former +<filename>configure</filename> run. So best keep it open with all +subdirectories unfolded just as shown above. Then select +<menuchoice><guimenu>Build</guimenu> <guimenuitem>Build +Project</guimenuitem></menuchoice> (or press the <keycap>F8</keycap> key) to +initiate the build sequence. As before, the <guilabel>Messages</guilabel> tool +view window will open at the bottom and list the outcome of this build run. And +additionally some files will appear on the <filename +class="directory">Debug</filename> subtree.</para> + +<para id="gettingstarted-compile-basic-build-cmd">There are not many source +files in our Hello example project, so the <guilabel>Messages</guilabel> window +will contain only a few lines. On top of them again find the command line +&kdevelop; issued to the underlying shell.</para> + +<programlisting> +cd '/home/devel/projects/hello/debug' && \ +WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k +</programlisting> + +<para>Not very surprisingly, &kdevelop; switched to the <filename +class="directory">Debug</filename> subtree root in order to run the +<filename>Makefile</filename> located there. A dedicated sub-environment was +set up again as before in the <link +linkend="gettingstarted-compile-basic-init">Initialization step</link> in which +then the <application>gmake</application> tool was called.</para> + +<para>Note the <computeroutput>-k</computeroutput> option in the +<application>gmake</application> call. It forces the build process to continue +up to its very end, even if errors will occur. This makes sense as &kdevelop; +will list all error messages in the <guilabel>Messages</guilabel> window. If +there are any, use the virtues of an &IDE;: Just click on the error message in +the <guilabel>Messages</guilabel> window and &kdevelop; will take you to +exactly the position where the error occurred in the source file.</para> + +<para>And what did happen inside the <filename +class="directory">Debug</filename> subtree? Not very much. A few files showed up +on the <filename class="directory">doc/en</filename> and <filename +class="directory">src</filename> branches, most notably the +<filename>hello</filename> file in <filename +class="directory">/home/devel/projects/hello/debug/src/</filename>. This, +finally, is the application binary we were looking for. All what is left +to do in our initial project check is to run this +<filename>hello</filename>.</para> +</sect3> + +<sect3 id="gettingstarted-compile-basic-run"> +<title>Run the Application</title> + +<para>There are no extra steps involved to run this new Hello +application. Either select <menuchoice><guimenu>Build</guimenu> +<guimenuitem>Execute Program</guimenuitem></menuchoice> or press +<keycombo><keycap>Shift</keycap> <keycap>F9</keycap></keycombo> or use the +<guibutton>Execute program</guibutton> button on the <guilabel>Build +Toolbar</guilabel> shown below.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="run-button.png"/> +</imageobject> +<caption><para>Running an application form the <guilabel>Build +Toolbar</guilabel>.</para> +</caption> +</mediaobject> +</screenshot> + +<para>That was all. &kdevelop; will now start the new application in +the dedicated console window which opens as <guilabel>Application</guilabel> +tool view on the bottom. There the command &kdevelop; issued to execute the +program will be shown in the top line:</para> + +<programlisting> +./hello +</programlisting> + +<para>showing that the &IDE; has a notion about where the executable it +shall run resides. This notion can be widely configured. See more about +this in the <link linkend="project-management">Project +Management</link> chapter.</para> + +<para>The <computeroutput>./hello</computeroutput> line will most likely +be followed by a warning message. Ignore this for now. It does not keep +our <application>Hello</application> form running.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="hello-world-app.png" format="PNG"/> +</imageobject> +<caption> +<para>Our initial <application>Hello</application> application.</para> +</caption> +</mediaobject> +</screenshot> + +<para>Close the <application>Hello</application> application window as +usual. If no errors occurred, &kdevelop; will report this as +<quote><computeroutput>*** Exited normally ***</computeroutput></quote> +in the <guilabel>Application</guilabel> tool view window.</para> +</sect3> +</sect2> + +<sect2 id="gettingstarted-compile-setup"> +<title>Configuring the Project</title> + +<para>In &kdevelop; there are numerous ways how you can manage your project. +This behavior is configurable on a per-project basis and mostly of interest to +the advanced developer. Yet there are a few project specific settings you +should know of right from the beginning. +</para> + +<simplelist> +<member><link linkend="gettingstarted-compile-setup-build">Of what use are build +configurations?</link></member> + +<member><link linkend="gettingstarted-compile-setup-config">Where to the define +the behavior of the <filename>configure</filename> script.</link></member> + +<member><link linkend="gettingstarted-compile-setup-make">Some considerations +how <application>make</application> should run.</link></member> + +<member><link linkend="gettingstarted-compile-setup-run">Where should the +executable be and how should it be called?</link></member> +</simplelist> + +<sect3 id="gettingstarted-compile-setup-build"> +<title>Build Configurations</title> + +<para>When we did a first run of the <filename>configure</filename> script in +the <link linkend="gettingstarted-compile-basic-config">Initial Hello +Configuration</link> section above, we noted that &kdevelop; had set up a +dedicated <filename class="directory">debug</filename> subdirectory for this +purpose. In this section we will briefly consider some consequences of +this feature.</para> + +<para>First of all, &kdevelop; does not necessarily use dedicated build +directories apart from the source. The preparations to automatically use +dedicated build configurations is done through templates the &appwizard; uses +when creating a new project.</para> + +<para>To find out which build configurations currently are available, have a +look at the <menuchoice><guimenu>Project</guimenu> <guisubmenu>Build +Configuration</guisubmenu></menuchoice> menu.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="build-configurations.png" format="PNG"/> +</imageobject> +<caption><para>There are various build configurations available +for this project.</para></caption> +</mediaobject> +</screenshot> + +<para>In this case, like our Hello example project, there are three different +build configurations available. In other cases, there may — initially +— be only one such build configuration, namely +<guimenuitem>default</guimenuitem>.</para> + +<para>The currently used build configuration has a check mark left to it. In +order to switch to another build configuration simply select its menu +entry.</para> + +<para>Now let us have a brief look at what these build configurations +provide.</para> + +<variablelist id="gettingstarted-compile-setup-build-configs"> +<varlistentry> +<term><guimenuitem>debug</guimenuitem></term> +<listitem> +<para>You should use this as the standard build configuration during the +development process. The build occurs separately from the source directories in +the dedicated <filename class="directory">debug</filename> subdirectory, &ie; +all object, auxiliary, and executable files will be put in the subdirectories +there instead of their counterparts in the project root. The +<filename>configure</filename> script will be given the +<computeroutput>--enable-debug=full</computeroutput> option and the +<computeroutput>CXXFLAGS="-O0 -g3"</computeroutput> will signal the &gcc; +compiler to not optimize the code and to insert extensive debug information +into the resulting binaries.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenuitem>optimized</guimenuitem></term> +<listitem> +<para>This is used to build a final C++ application. The build occurs +separately from the source directories in the dedicated <filename +class="directory">optimized</filename> subdirectory. No specific arguments to +the <filename>configure</filename> script will be preset, yet the +<computeroutput>CXXFLAGS="-O2 -g0"</computeroutput> will signal the &gcc; +compiler to optimize the code and to not insert debug information into the +resulting binaries.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term><guimenuitem>default</guimenuitem></term> +<listitem> +<para>The term <quote>default</quote> denotes the standard setup when you build +an application from the console using ⪚ the &GNU; +<application>configure</application> and +<application>make</application>/<application>gmake</application> command line +oriented build tools. Other than <guimenuitem>debug</guimenuitem> or +<guimenuitem>optimize</guimenuitem> no dedicated build directory will be used. +The application will by default be built in the sources directories instead. +There are no special configuration switches predefined. Building and running the +application will use the default settings of the underlying tools (e.g. &gcc;, +etc.).</para> + +<warning> +<para>Think twice before you decide to use the +<guimenuitem>default</guimenuitem> build environment!</para> + +<para>It cannot be used in parallel to the dedicated +<guimenuitem>debug</guimenuitem> or <guimenuitem>optimized</guimenuitem> ones. +<emphasis>Any build operation using <guimenuitem>default</guimenuitem> will +render both of the other build environments unusable.</emphasis> This is caused +by some peculiarities of the <filename>Makefile</filename> construction process +using the +<application>automake</application>/<application>autoconf</application> +machinery, which cannot be easily overcome.</para> +</warning> +</listitem> +</varlistentry> +</variablelist> + +<para>Now, why does one one want to use different build configurations at all, +when they even appear to be not compatible to each other? The answer is — +it simplifies edit-compile-debug cycles. The extra debug instructions +inserted into the binaries as well as all those subtle structure changes to +the program code made during optimizations will effect the run time behavior of +the resulting application. So in many cases, when the logical structure of some +routine appears to be correct, you may want to test whether it still behaves +correctly under more practical conditions.</para> + +<para>This is where the build configurations of &kdevelop; step in. Because +the built object and executable files in each dedicated build directory and the +build commands are kept separately from each other only source changes need +to be handled when you switch between these build configurations.</para> + +<para>Thus instead of cleaning up and recompile everything from scratch with +alternate options, you need only switch from the +<guimenuitem>debug</guimenuitem> to the <guimenuitem>optimize</guimenuitem> +build configuration, have the source changes compiled in and then retest the +application under these circumstances. If anything inappropriate shows up, +simply switch back to <guimenuitem>debug</guimenuitem> and immediately continue +your work there.</para> + +<para>A final note — many build configuration settings are configurable. +You can even define your own build configurations if your development process +requires some. We will briefly look at these possibilities in the next +section.</para> +</sect3> + +<sect3 id="gettingstarted-compile-setup-config"> +<title>Project Configure Options</title> + +<para>Configuring the application properly is vital in the &GNU; +autotools building chain. This is usually guided by option definitions to the +<filename>configure</filename> script and/or specific flags settings in the +environment prior to running <filename>configure</filename> as ⪚ the +<computeroutput>CXXFLAGS</computeroutput> in our previous discussions.</para> + +<para>You may set most of the configuring options for a given project from +within &kdevelop; &GUI;. Select +<menuchoice><guimenu>Project</guimenu> +<guimenuitem>Project Options</guimenuitem></menuchoice> and then from the +icon bar on the left of the dialog the <guiicon>Configure Options</guiicon> +icon. The <guilabel>Configure Options</guilabel> dialog featuring several tabbed +windows will display on the right handed side.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-configure.png" format="PNG"/> +</imageobject> +<caption><para>Most configure options can be defined here.</para></caption> +</mediaobject> +</screenshot> + +<para>As you see, there are quite a lot of options you can set up in this +dialog. For now we will briefly look at only a few of them with regard to our +Hello example project. For detailed instructions see the <link +linkend="projects-configure">Configuring Projects</link> chapter. If you +want to know more about the meaning of the various flags which can be +set, look up <command>info make</command> from the console (or +<command>info:make</command> from within &konqueror;) and there the +<menuchoice><guimenu>Implicit Rules</guimenu> +<guimenuitem>Implicit Variables</guimenuitem></menuchoice> section.</para> + +<para>There are several tabbed dialog setup windows from which the first +one, <guilabel>General</guilabel>, refers to commonly used settings, +while the others are rather compiler specific. In all cases, however, will the +actual contents of those dialogs be governed by the given build +configuration.</para> + +<para>You select the build configuration whose configuration settings +have to be defined from the <guilabel>Configuration</guilabel> combo box +on top of the <guilabel>Configure Options</guilabel> dialog.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-buildconfig.png" format="PNG"/> +</imageobject> +<caption><para>Select the build configuration whose settings to +define.</para></caption> +</mediaobject> +</screenshot> + +<para>Now select another build configuration from this combo box and note how +the contents of ⪚ the <guilabel>Configure arguments</guilabel> and +<guilabel>Build directory</guilabel> text boxes change according to the +settings we mentioned in the <link +linkend="gettingstarted-compile-setup-build-configs"> build +configurations list</link> above.</para> + +<sect4 id="gettingstarted-compile-setup-config-general"> +<title>General Configuration Settings</title> + +<para>On the <guilabel>General</guilabel> dialog page, these +configuration options can be defined:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>Configure arguments</title> +<para>These are the options &kdevelop; assigns to the +<filename>configure</filename> script call in the build process. See the +<link linkend="gettingstarted-compile-basic-config-cmd">example</link> in +the <quote>Initial Hello Configuration</quote> section above.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Build directory</title> +<para>This is the subdirectory in the current project root, where &kdevelop; +will put all files created in the build process. Ideally, this should +correspond to the name of the build configuration in use, but you are +free to use any name you like, provided it is different from any other +build configuration directory.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Top source directory</title> +<para>You won't need this one often. It defaults to the project root +directory and needs only be redefined if your project sources are located +in another place.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>C/C++ preprocessor flags (CPPFLAGS)</title> +<para>Put specific instructions for the preprocessor here. &kdevelop; will +use this to set up a temporary environment before it calls the actual +build tool. Again, see the <link +linkend="gettingstarted-compile-basic-config-cmd">example</link> in +the <quote>Initial Hello Configuration</quote> section above how this is +done.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Linker flags (LDFLAGS)</title> +<para>This is extra information for the <application>ld</application> linker +tool where it should look for additional libraries. It is used to build the +temporary build environment as well.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Environment Variables</title> +<para>Here you may define additional variables to be set up in the +temporal build environment, &kdevelop; will set up before calling the +respective build tool. Again, you must define these environment variables for +every build configuration where they are to be used.</para> +</formalpara> +</listitem> +</itemizedlist> +</sect4> + +<sect4 id="gettingstarted-compile-setup-config-spec"> +<title>Compiler Specific Settings</title> + +<para>The other tabs on the <guilabel>Configure Options</guilabel> dialog +page are for compiler specific settings. They are similarly structured, +so it suffices to have a brief look at the <guilabel>C++</guilabel> page.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-cpp.png" format="PNG"/> +</imageobject> +<caption><para>Select the compiler and its working environment &kdevelop; shall +use here.</para></caption> +</mediaobject> +</screenshot> + +<para>This is what you can set up from here:</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>C++ compiler</title> +<para>Select the C++ compiler &kdevelop; should regularly use from this +combo box. It however lists only those compilers &kdevelop; really knows +of.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Compiler command (CXX)</title> +<para>Only for experts. This is only needed if the C++ compiler is not standard. +Put the name by which it is called here.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Compiler flags (CXXFLAGS)</title> +<para>Here you can enter any extra option &kdevelop; shall pass (via the +<filename>Makefile</filename>) to the compiler. Some option values will be +preset according to the build configuration selected in the +<guilabel>Configuration</guilabel> combo box.</para> +</formalpara> + +<para>Note, that many common compiler options can be selected from a +dialog which will pop up when you press the <guibutton>...</guibutton> button to +the right of the text box.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-cppoptions.png" format="PNG"/> +</imageobject> +<caption><para>Use this dialog to define the &GNU; C++ compiler +behavior.</para></caption> +</mediaobject> +</screenshot> + +<para>We deliberately selected the <guilabel>Optimization</guilabel> tab +here. Note how the <guilabel>No Optimization</guilabel> option has been +preselected (according to the <computeroutput>-O0</computeroutput> +option preset in the <computeroutput>debug</computeroutput> build +configuration).</para> + +<para>Unfortunately you cannot currently select all options from this +dialog. The <computeroutput>-g3</computeroutput> option ⪚ used by the +<computeroutput>debug</computeroutput> build +configuration would have to be altered manually if ever needed.</para> +</listitem> +</itemizedlist> +</sect4> +</sect3> + +<sect3 id="gettingstarted-compile-setup-make"> +<title>How Make Should Build the Program</title> + +<para>You can as well configure the way &kdevelop; will call the +<application>make</application> tool in the project build. Select +<menuchoice><guimenu>Project</guimenu> +<guimenuitem>Project Options</guimenuitem></menuchoice> and then the +<guiicon>Make Options</guiicon> icon from the left dialog window side. The +<guilabel>Make Options</guilabel> dialog page will then be displayed to +the right.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-make.png" format="PNG"/> +</imageobject> +<caption><para>Define how &kdevelop; will call the +<application>make</application> tool.</para></caption> +</mediaobject> +</screenshot> + +<para>There is not much to do here for now. The only setting of interest in +most cases will be the <guilabel>Abort on first error</guilabel> switch. +You will find it deactivated in most projects. This corresponds to the +<computeroutput>-k</computeroutput> option in the +<application>gmake</application> call we found in the <link +linkend="gettingstarted-compile-basic-build-cmd">initial build</link> of +our example Hello project.</para> + +<para>This makes sense in an &IDE; like &kdevelop; which will protocol any +error message during the build. After the build process you may easily +navigate to any error message in the <guilabel>Messages</guilabel> tool +window. Use <menuchoice><guimenu>View</guimenu> +<guimenuitem>Next Error</guimenuitem></menuchoice> and +<menuchoice><guimenu>View</guimenu> <guimenuitem>Previous +Error</guimenuitem></menuchoice> or respectively the <keycap>F4</keycap> and +<keycombo><keycap>Shift</keycap> <keycap>F4</keycap></keycombo> keys for this. +&kdevelop; will automatically activate the editor window of the source file in +question and put the cursor on the error line.</para> + +<para>If on the other hand you rather want the build be stopped on whenever an +error occurs, check the <guilabel>Abort on first error</guilabel> option +in this dialog. &kdevelop; will then call <application>gmake</application> +without the <computeroutput>-k</computeroutput> option.</para> +</sect3> + +<sect3 id="gettingstarted-compile-setup-run"> +<title>How to Run the Executable</title> + +<para>Once the build is complete, you can easily run the application from within +&kdevelop;. Use either <menuchoice><guimenu>Build</guimenu> +<guimenuitem>Execute Program</guimenuitem></menuchoice>, the +<keycombo><keycap>Shift</keycap> <keycap>F9</keycap></keycombo> keys, or the +<guibutton>Execute program</guibutton> button in the <guilabel>Build +Toolbar</guilabel> of &kdevelop;.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="run-button.png" format="PNG"/> +</imageobject> +<caption><para>Run the program from here.</para></caption> +</mediaobject> +</screenshot> + +<para>But where is the executable located which should be run? How does +one have &kdevelop; append options to the call? Or, how can I have the +application executed in a terminal by its own to test its console interactive +behavior?</para> + +<para>All this can be solved by configuring some project oriented run options in +&kdevelop;. Select <menuchoice><guimenu>Project</guimenu> +<guimenuitem>Project Options</guimenuitem></menuchoice> and then the +<guiicon>Run Options</guiicon> icon from the icon bar on the left dialog window +side. The <guilabel>Run Options</guilabel> dialog page will display to the +right.</para> + +<screenshot> +<mediaobject> +<imageobject> +<imagedata fileref="configure-project-run.png" format="PNG"/> +</imageobject> +<caption><para>Define where and how your program shall be run.</para></caption> +</mediaobject> +</screenshot> + +<para>Now, there is quite a lot which can be set up from this dialog. +Basically there are four groups of configuration items.</para> + +<itemizedlist> +<listitem> +<formalpara> +<title>Directory</title> +<para>This tells &kdevelop; where it basically shall assume the +executable to be called. There are three possibilities you can select +from.</para> +</formalpara> + +<para>Note however that only root directories are defined here. +&kdevelop; usually looks for the executable in some subdirectory +given in the next configuration group.</para> + +<itemizedlist> +<listitem> +<para>Run from the directory, where the executable was build the last +time. This is the default. You can keep this for now.</para> +</listitem> + +<listitem> +<para>Run from the build directory according to the currently selected +<link linkend="gettingstarted-compile-setup-build">build configuration</link>. +The name of this directory was set up on the <link +linkend="gettingstarted-compile-setup-config-general">General +Configuration</link> dialog page.</para> + +<para>This is the root where &kdevelop; will find the executable. It +changes automatically with the selection you made in +<menuchoice><guimenu>Project</guimenu> +<guisubmenu>Build Configurations</guisubmenu></menuchoice> menu. Try it.</para> + +<para>Other than always running the most recently built executable according to +the setting above, this allows you to switch the program to be executed by +simply selecting another build configuration from the <guimenu>Project</guimenu> +menu.</para> +</listitem> + +<listitem> +<para>Run the executable found in a fixed custom directory. Again +this is the root only from where the actual executable is to be +found.</para> + +<para>Use this if you ⪚ want to run the actually installed program instead of +the version located in the project directories.</para> +</listitem> +</itemizedlist> +</listitem> + +<listitem> +<formalpara> +<title>Program</title> +<para>This tells &kdevelop; the relative position and name of the +program it shall actually call. This is relative to the root directory +defined in the configuration group above. Furthermore you can define any +argument &kdevelop; will pass to the program when it is actually called.</para> +</formalpara> + +<note> +<para>If leave the <guilabel>Main program</guilabel> text box empty, the +<emphasis>active target</emphasis> settings of the &automanag; will be used. +Although this is an expert setting, inadvertently leaving this input +field blank is a common cause of problems. Check this setting if &kdevelop; +appears not to call the executable you wanted.</para> +</note> +</listitem> + +<listitem> +<formalpara> +<title>Environment Variables</title> +<para>&kdevelop; will set up a dedicated shell environment to run the +program in. Define any extra environment variable in this configuration +group.</para> +</formalpara> +</listitem> + +<listitem> +<formalpara> +<title>Miscellaneous</title> +<para>Two more check boxes are located at the bottom of this dialog page.</para> +</formalpara> + +<itemizedlist> +<listitem> +<para><guilabel>Automatically compile before execution</guilabel> comes +in handy most of time. &kdevelop; will check the project for changes and +perform necessary configure and build steps for you any time you command +it to run the program.</para> + +<para>Uncheck this in case you want to run the program version prior to the +last change.</para> +</listitem> + +<listitem> +<para><guilabel>Start in external terminal</guilabel> is interesting if +you want to test the input/output behavior of non-&GUI; programs in a console +terminal. This is unchecked by default, so &kdevelop; does start the program in +a window of its own without console terminal I/O capabilities.</para> +</listitem> +</itemizedlist> +</listitem> +</itemizedlist> +</sect3> +</sect2> +</sect1> + +<sect1 id="gettingstarted-extend"> +<title>How to Extend a Project — the &automanag;</title> + +<para>(- to be written -)</para> + +<sect2 id="gettingstarted-extend-automake"> +<title>A Short Look at the Automake Machinery</title> + +<para>(- to be written -)</para> +</sect2> + +<sect2 id="gettingstarted-extend-pics"> +<title>How to Place Icons in a Separate Directory</title> + +<para>(- to be written -)</para> +</sect2> + +<sect2 id="gettingstarted-extend-class"> +<title>How to Add New Classes</title> + +<para>(- to be written -)</para> + +<caution><para> +Be careful when you select your class file names. It is extremely difficult to +change them later.</para></caution> +</sect2> + +<sect2 id="gettingstarted-extend-subproject"> +<title>What is in a Subproject?</title> + +<para>(- to be written -)</para> + +<sect3 id="gettingstarted-extend-subproject-active"> +<title>Concentrate on Your Work — the Active Target</title> + +<para>(- to be written -)</para> +</sect3> +</sect2> + +<sect2 id="gettingstarted-extend-restructure"> +<title>Some Steps to Restructure a Project</title> + +<para>(- to be written -)</para> +</sect2> +</sect1> + + +<sect1 id="gettingstarted-debug"> +<title>How to Debug</title> + +<para>(- to be written -)</para> +</sect1> + + +<sect1 id="gettingstarted-doc"> +<title>A Note on Your Project Documentation</title> + +<para>The &kde; project uses <ulink +url="http://www.docbook.org/tdg5/en/html/docbook.html">docbook</ulink> for +generating your project handbook (&ie; the user manual). The user manual is +available through your application menubar by choosing +<menuchoice><guimenu>Help</guimenu> +<guimenuitem><replaceable>YourApplication</replaceable> +Handbook</guimenuitem></menuchoice > when your &kde; GUI application is running. +After building your project, the user manual is displayed in &kde; +&khelpcenter;. It should explain to the user how your application works, what +are the main features and how to configure it. It should also explain the +advanced features if any. +</para> +<para>All &kde; based templates in &kdevelop; have a doc subdir which contains +a <filename>index.docbook</filename> template in the en folder to get you +started in writing the user manual. You should edit this +<filename>index.docbook</filename> in &kdevelop; and start changing personal +details such as name, email, &etc;. Look at the comments in this file and try +following these indications to start your application documentation. Rebuild +your project to see the changes in &khelpcenter;.</para> +<note><para>You need to install your project using +<menuchoice><guimenu>Build</guimenu> +<guimenuitem>Install</guimenuitem></menuchoice > or <guimenuitem>Install (as +root user)</guimenuitem> in &kdevelop; to see the user manual in +&khelpcenter;.</para></note> +<para>You can find more about the docbook syntax on <ulink +url="http://l10n.kde.org/docs/markup/index.html">the &kde; documentation +website</ulink>.</para> +</sect1> + +<sect1 id="gettingstarted-keys"> +<title>Last But Not Least, Keyboard Shortcuts</title> + +<para>(- to be written -)</para> +</sect1> + +<sect1 id="gettingstarted-whereto"> +<title>Where to go from here</title> + +<para>(- to be written -)</para> + +<sect2 id="gettingstarted-whereto-faq"> +<title>Frequently Encountered Problems</title> + +<simplelist> +<member>The nutshell chapter</member> +<member>FAQ pages</member> +<member>Forum</member> +<member>Mailing lists</member> +</simplelist> +</sect2> + +<sect2 id="gettingstarted-whereto-projects"> +<title>Working With Projects</title> + +<para>(- to be written -)</para> + +<sect3 id="gettingstarted-whereto-projects-open"> +<title>Using Existing &kdevelop; Projects</title> + +<para>(- to be written -)</para> +</sect3> + +<sect3 id="gettingstarted-whereto-projects-import"> +<title>Importing External Projects</title> + +<para>(- to be written -)</para> +</sect3> +</sect2> +</sect1> + +</chapter> |