Manual Codeblocks
Manual Codeblocks
User Manual
Version 2.1.20
1.13.4 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.13.5 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.6 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.7 Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.8 Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.9 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.14 Automatic source paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.14.2 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.14.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2 Plugins 41
2.1 General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2 Astyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3 AutoVersioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.3 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.4 Dialog notebook tabs . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.5 Including in your code . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.6 Change log generator . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.4 Browse Tracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.5 CodeSnippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.6 Code Completion in Code::Blocks . . . . . . . . . . . . . . . . . . . . . . . 54
2.6.1 Code Completion plugin . . . . . . . . . . . . . . . . . . . . . . . . 55
2.6.2 CB Clangd Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.7 CScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.7.1 General information . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.7.2 Installing CScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.8 Doxyblocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.9 Editor Tweaks plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.10 Environment Variables plugin . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.11 FileManager and PowerShell Plugin . . . . . . . . . . . . . . . . . . . . . . 65
2.12 HexEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.13 Incremental Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.14 NassiShneiderman plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.14.1 Create a diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.14.2 Editing structograms . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.15 LibFinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.15.1 Searching for libraries . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.15.2 Including libraries in projects . . . . . . . . . . . . . . . . . . . . . 76
2.15.3 Using LibFinder and projects generated from wizards . . . . . . . . 77
2.16 SpellChecker plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.16.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.16.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.16.3 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.16.4 Thesaurus files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2 Code::Blocks
Code::Blocks V2.1.20 Contents
3 Variable Expansion 95
3.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.2 List of available built-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.2.1 Code::Blocks workspace . . . . . . . . . . . . . . . . . . . . . . . . 96
3.2.2 Files and directories . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.2.3 Build targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.2.4 Language and encoding . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.2.5 Time and date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.2.6 Platform dependence . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.7 Command line expansions . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.8 Random values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.9 Standard path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.2.10 Build in functions for path conversion . . . . . . . . . . . . . . . . . 99
3.2.11 Conditional Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.3 Script expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4 Command Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4.1 Example 1: Compile single file . . . . . . . . . . . . . . . . . . . . . 101
3.4.2 Example 2: Link object files to executable . . . . . . . . . . . . . . 101
3.5 Global compiler variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.5.1 Synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.5.2 Names and Members . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.5.3 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.5.4 Using Global Compiler Variables . . . . . . . . . . . . . . . . . . . 103
Code::Blocks 3
Contents Code::Blocks V2.1.20
4 Code::Blocks
Code::Blocks V2.1.20 Contents
Code::Blocks 5
1 Code::Blocks Project Management
The instructions in several paragraphs (for example chapter 2 on page 41 or chapter 3 on
page 95) are official documentations of the Code::Blocks Wiki site (eventually reviewed
and amended) and available in english only. This documentation is an extension of the
original version 1.1, compiled and/or written by Mario Cupelli.
What is an IDE?
Code::Blocks is an IDE. What does that mean?
IDE is for Integrated Development Environment. It is a graphical environment framework
for working with source code and using compilers and linkers (in the case of Code::Blocks,
these can be several). For several languages, Code::Blocks has a built-in syntax highlight-
ing system and offers code completion which helps you to identify language-specific fea-
tures as keywords, classes, functions, etc.
With Code::Blocks you’ll be able to write codes in different high level languages as C,
C++, fortran and some others. Code::Blocks will help you to translate these source
codes to binary executables. These translations are made with a compiler and a linker.
Code::Blocks itself, is NOT a compiler nor a linker, but it creates a graphic interface to
these tools (and many others) to help you to build your executables by using external
compilers and linkers. Code::Blocks can use different compilers (and linkers), from Mi-
crosoft/Windows world as Visual C, C++, etc, but also from Unix/Linux world as many
distributions of CC/C++/gcc/g++. Many compilers/linkers commonly used in Linux
have been ported to Windows.
If you use Linux, you have already compilers/linkers installed on your system.
On Windows, it’s generally not the case: no compiler/linker installed. For your conve-
nience, a Windows version of Code::Blocks is distributed with a compilation toolchain,
MinGW/GCC in 64 or 32 bits, coming from the Linux world. However, this is provided
”as-is” and not developed/maintained by the Code::Blocks development team. You are
not obliged to use this toolchain. Other Windows versions are distributed without a com-
piler but you’ll have to install at least one to be able to build executables.
Code::Blocks is able to identify by itself some compilers/linkers during installation. In any
case, it will be possible, afterwards, to configure Code::Blocks to use them or to modify
the configuration.
It’s also possible, in Code::Blocks, to support languages that are not natively supported
(for example D, java, fortran, rust,. . . ) through the use of plugins that you can find inside
Code::Blocks distributions, built by users on Internet (on Code::Blocks forums for exam-
ple) or simply by configuring a new language by yourself (of course needs some knowledge
and work by you).
1 Code::Blocks Project Management Code::Blocks V2.1.20
The below illustration shows the design of the Code::Blocks user interface.
Management This window contains the interface ’Projects’ which will in the following
text be referred to as the project view. This view show all the projects opened in
Code::Blocks at a certain time. The ’Symbols’ tab of the Management window shows
symbols, variables etc..
Editor In the above illustration, a source named hello.c is opened with syntax high-
lighting in the editor.
Open files list shows a list of all files opened in the editor, in this example: hello.c.
CodeSnippets can be displayed via the menu ’View’ →’CodeSnippets’ . Here you can
manage text modules, links to files and links to urls.
Logs & others This window is used for outputting search results, log messages of a com-
piler etc...
The status bar gives an overview of the following settings:
Absolute path of an opened file in the editor.
The editor uses the default character encoding of your host operating system. This
setting will be displayed with default.
8 Code::Blocks
Code::Blocks V2.1.20 1.1 Project View
Row and column number of the current cursor position in the editor.
Current state of a file. A modified file will be marked with Modied otherwise this
entry is empty.
The permission of a file. A file with read only settings will display Read only in the
status bar. In the window ’Open files list’ these files will be emphasised with a lock
as icon overlay.
Note:
In the active editor the user can select the context menu properties.
In the appearing dialog in the tab ’General’ the option ’File is read-
only’ can be selected. This option will result in a read-only access of
the corresponding file within Code::Blocks, but the original read and
write attributes of the file on the filesystem are not modified.
Code::Blocks 9
1 Code::Blocks Project Management Code::Blocks V2.1.20
Note:
If you deactivate ’Project tree’ →’Categorize by file types’ in the
context menu, the category display will be switched off, and the files
will be listed as they are stored in the file system.
Note:
The available templates in the Project Wizard can be edited by se-
lection via right-click.
10 Code::Blocks
Code::Blocks V2.1.20 1.6 Pre- and Postbuild steps
Release simultaneously. Virtual Targets are shown in the symbol bar of the compiler under
Build Targets.
Archiving a project can be another example for a Postbuilt Step. For this purpose, create
a Build Target ’Archive’ and include the following instruction in the Postbuilt Step:
z i p = j 9 $ (PROJECT NAME) $ (TODAY) . z i p s r c h o b j $ (PROJECT NAME) . cbp
With this command, the active project and its sources, header and objects will be packed
as a zip file. In doing so, the Built-in variables $(PROJECT_NAME) and $(TODAY), the
Code::Blocks 11
1 Code::Blocks Project Management Code::Blocks V2.1.20
project name and the current date will be extracted (see section 3.2 on page 96). After the
execution of the Target ’Archive’, the packed file will be stored in the project directory.
In the share/codeblocks/scripts directory you will find some examples for scripts.
You can add a script via menu ’Settings’ →’Scripting’ and register in a menu. If you
execute e.g. the script make dist from the menu then all files belonging to a project will
be compressed in an archive <project>.[Link].
Note:
A script can also be included at a Build Target.
12 Code::Blocks
Code::Blocks V2.1.20 1.10 Editor and Tools
The Code::Blocks variables are marked by $ (see section 3.4 on page 100). They are set
automatically so that you only have to replace the Assembler option <asopt> by your
own settings.
1.10.2 Abbreviation
A lot of typing can be saved in Code::Blocks by defining abbreviation. This is done by
selecting ’Settings’ →’Editor’ and defining the abbreviations under the name <name>,
which can then be called by the keyboard shortcut Ctrl-J (see Figure 1.3 on page 14).
Parametrisation is also possible by including variables $(NAME) in the abbreviations.
#i f n d e f $ ( Guard token )
#define $ ( Guard token )
#endif // $ ( Guard token )
Code::Blocks 13
1 Code::Blocks Project Management Code::Blocks V2.1.20
When performing the abbreviation <name> in the source text and performing Ctrl-J,
the content of the variable is requested and included.
1.10.3 Personalities
Code::Blocks settings are saved as application data in a file called <user>.conf in the
codeblocks directory. This configuration file contains information such as the last opened
projects, settings for the editor, display of symbol bars etc. By default, the ’default’ per-
sonality is set so that the configuration is stored in the file [Link]. If Code::Blocks
is called from the command line with the parameter --personality=myuser, the settings
will be stored in the file [Link]. If the profile does not exist already, it will auto-
matically be created. This procedure makes it possible to create the corresponding profiles
for different work steps. If you start Code::Blocks from the command line with the addi-
tional parameter--personality=ask, a selection box will be displayed for all the available
profiles.
Note:
The name of the current profile/personality is displayed in the right
corner of the status bar.
14 Code::Blocks
Code::Blocks V2.1.20 1.10 Editor and Tools
The tool cb share conf, which can be found in the Code::Blocks installation directory,
is used for managing and storing these settings.
If you wish to define standard settings for several users of a computer, the configuration
file [Link] has to be stored in the directory \Documents and Settings\Default
User\Application Data\codeblocks in Win 7, \Users\Default\AppData\Roaming\CodeBlocks
in Windows 10 or 11, or an equivallent profile path for other OS. During the first startup,
Code::Blocks will copy the presettings from ’Default User’ to the application data of the
current users.
To create a portable version of Code::Blocks on a USB stick, proceed as follows. Copy the
Code::Blocks installation to a USB stick and store the configuration file [Link]
in this directory. The configuration will be used as a global setting. Please take care that
the file is writeable, otherwise changes of the configuration cannot be stored.
If you select the workspace or a project in the workspace in the project view you will be
able to search for a file in the project. Just select ’Find file’ from the context menu, then
type the name of the file and the file will be selected. If you hit return this file will be
opened in the editor (see Figure 1.4 on page 15).
1. Set cursor at the location where a header file is included and open this file via the
context menu ’open include file’ (see Figure 1.5 on page 16)
2. Swap between header and source via the context menu ’Swap header/source’
3. Select e.g. a define in the editor and choose ’Find declaration’ from the context
menu to open the file with its declaration.
Code::Blocks 15
1 Code::Blocks Project Management Code::Blocks V2.1.20
Code::Blocks offeres several ways of searching within a file or directory. The dialog box
for searching is opened via ’Search’ →’Find’ (Ctrl-F) or ’Find in Files’ (Ctrl-Shift-F).
Alt-G and Ctrl-Alt-G are another useful functions. The dialog which will open on using
this shortcut, lets you select files/functions and then jumps to the implementation of the
selected function (see Figure 1.6 on page 16) or opens the selected file in the editor. You
may use wildcards like * or ? etc. for an incremental search in the dialog.
Note:
With the Ctrl-PgUp shortcut you can jump to the previous function,
and via Ctrl-PgDn you can jump to the next function.
In the editor, you can open a new Open Files dialog via Ctrl-Tab and you can switch
between the listed entries. If the Ctrl-key is pressed, then a file can be selected in different
ways:
1. If you select an entry with the left mouse button, then the selected file will be
opened.
16 Code::Blocks
Code::Blocks V2.1.20 1.10 Editor and Tools
2. If you press the Tab-key you will switch between the listed entries. Releasing the
Crtl-key will open the selected file.
3. If you move the mouse over the listed entries, then the current selection will be
highlighted. Releasing the Crtl-key will open the selected file.
4. If the mouse pointer is outside the highlighted selection, then you can use the mouse-
wheel to switch between the entries. Releasing the Crtl-key will open the selected
file.
The display of line numbers in Code::Blocks can be activated via ’Settings’ →’General
Settings’ in the field ’Show line numbers’. The shortcut Ctrl-G or the menu command
’Search’ →’Goto line’ will help you jump to the desired line.
Note:
If you hold the Ctrl key and then select text in the Code::Blocks editor
you can perform e.g. a Google search via the context menu.
The Code::Blocks Management window offers a tree view for symbols of C/C++ sources
for navigating via functions or variables. As the scope of this view, you can set the current
file or project, or the whole workspace.
Note:
Entering a search term or symbol names in the ’Search’ input mask
of the Symbol Browser results in a filtered view of the symbols if any
hits occurred.
Code::Blocks 17
1 Code::Blocks Project Management Code::Blocks V2.1.20
Structures and classes are displayed in the ’bottom tree’ and the sort sequence can
be modified via the context menu. If a category is selected by mouse-click, the found
symbols will be displayed in the lower part of the window (see Figure 1.7 on page 18).
Double-clicking the symbol will open the file in which the symbol is defined or the function
implemented, and jumps to the corresponding line. An auto-refresh of the symbol browser
without saving a file, can be activated via the menu ’Settings’ →’Editor’ →’Code Com-
pletion’ (see Figure 1.8 on page 19). For projects with many symbols the performance
within Code::Blocks will be affected.
18 Code::Blocks
Code::Blocks V2.1.20 1.10 Editor and Tools
Note:
In the editor, a list of the classes can be displayed via the context
menus ’Insert Class method declaration implementation’ or ’All class
methods without implementation’ .
On Linux, man pages are usually installed anyway, for Windows you might want to down-
load them e.g. from here: [Link]
Helpfile options
Code::Blocks 19
1 Code::Blocks Project Management Code::Blocks V2.1.20
You can tell Code::Blocks to use a file as the default helpfile, checking the ”This
is the default help file” box. This way, that file will be shown whenever you press
the ’F1’ key. Moreover, if you write the $(keyword) as default keyword (see below),
this file will be searched for keywords (taking the word selected or the word below
the cursor in the current surce file) and will be opened showing the corresponding
topic, if present.
You can tell Code::Blocks to open the helpfile on a topic of your choice, writing the
correspondent keyword in the ”Default keyword value” textbox. If the helpfile is the
default helpfile and you use $(keyword) as default keyword, the editor will use the
word under the cursor (or currently selected) in the current opened file as keyword,
opening the default help file at the relevant topic. This will be true, however, only
for the default helpfile: any other helpfile or document will not be searched this
way. For example, if you have the language reference as default helpfile and add the
standard library helpfile, you will have the language keyword explained when hitting
’F1’ on them, but won’t have the library functions explained this way. Viceversa,
setting the standard library helpfile as default will give you the F1 help on them
but you will loose this feature for the language keywords.
If your helpfile is an HTML file, you can tell Code::Blocks to open it with the
embedded HTML viewer, checking the corresponding option.
Code::Blocks provides an ’Embedded HTML Viewer’, which can be used to display simple
html file and find keywords within this file. Just configure the path to the html file, which
should be parsed and enable the checkbox ’Open this file with embedded help viewer’ via
the menu ’Settings’ →’Environment’ →’Help Files’ .
20 Code::Blocks
Code::Blocks V2.1.20 1.11 Tips for working with Code::Blocks
Note:
If you select a html file with a double-click within the file explorer
(see section 2.11 on page 65) then the embedded html viewer will
be started, as long as no association for html files is made in file
extensions handler.
CHM Files
You can find c++ chm help files on the web. Just add them via the dialog.
For Linux you have to install a chm viewer to be able to open chm files. There are severals
like gnochm, kchmviewer, xchm and so on.
Including external tools is possible in Code::Blocks via ’Tools’ →’Configure Tools’ →’Add’
. Built-in variables (see section 3.2 on page 96) can also be accessed for tool parameters.
Furthermore there are several kinds of launching options for starting external applica-
tions. Depending on the option, the externally started applications are stopped when
Code::Blocks is quit. If the applications are to remain open after quitting Code::Blocks,
the option ’Launch tool visible detached’ must be set.
Code::Blocks 21
1 Code::Blocks Project Management Code::Blocks V2.1.20
This feature can be enabled or disabled with the checkbox ’Use Changebar’ in the menu
’Settings’ →’Editor’ →’Margins and caret’ .
Note:
If a modified file is closed, then the changes history like undo/redo
and changebars get lost. Via the menu ’Edit’ →’Clear changes history’
or the corresponding context menu you are able to clear the changes
history even if the file is kept open.
uses the parameter, in our case it is a file specified with an absolute path, and opens
it in an existing Code::Blocks instance or starts a first instance if required.
OpenLine This command opens a file at a given line number in a Code::Blocks instance.
The line number is specified with : line .
22 Code::Blocks
Code::Blocks V2.1.20 1.11 Tips for working with Code::Blocks
[ OpenLine ( ”d : \ temp\ t e s t . t x t : 1 0 ” ) ]
Raise Set the focus to the Code::Blocks instance. A parameter must not be passed.
So it might be the case that different versions of a compilers or other tools are manda-
tory for different projects. One possibility in such a case is to change the environmental
variables in the system control for every project. However, this procedure is error-prone
and not flexible. For this requirement, Code::Blocks offers an elegant solution. Different
configurations of environmental variables can be created which are used only internally in
Code::Blocks. Additionally, you can switch between these configurations. The Figure 1.12
on page 23 shows the dialog which you can open via ’Environment Varibales’ under ’Set-
tings’ →’Environment’ . A configuration is created via the ’Create’ button.
Access and scope of the environmental variables created here, is limited to Code::Blocks.
You can expand these environmental variables just like other Code::Blocks variables via
$(NAME).
Code::Blocks 23
1 Code::Blocks Project Management Code::Blocks V2.1.20
Note:
A configuration for the environmental variable for each project can
be selected in the context menu ’Properties’ of the ’EnvVars options’
tab.
Example
You can write the used environment into a postbuild Step (see section 1.6 on page 11) in
a file <project>.env and archive it within your project.
cmd / c echo \%PATH\% > p r o j e c t . env
or under Linux
echo \$PATH > p r o j e c t . env
Note:
Another example is editing a file in Full Screen mode without symbol
bars. You can create a perspective such as ’Full’ and assign a hot key
for this purpose.
24 Code::Blocks
Code::Blocks V2.1.20 1.11 Tips for working with Code::Blocks
Nevertheless, it’s also usefull to split the display window into two (or more) parts and
display in each sub-view a different file (for example a source file <name>.cpp in one view
and the corresponding header file <name>.h in the other view. A way to achieve this,
is to have a project with several editor tabs displayed (one file in each tab). With your
mouse, you select then drag and release one tab at the top (or the bottom) of the editor
window to split horizontally, or completely at the right (or the left) of the editor window
to split vertically. A blue ”ghost” windows appears in the editor during the mouse drag.
The second view is created after the mouse release.
Figure 1.13: Drag and release to obtain a horizontal splitted view with two different files
Figure 1.14: Drag and release to obtain a vertical splitted view with two different files
Note:
You can do this several times, but on too small screens you will obtain
too many subwindows, not easy to read
Code::Blocks 25
1 Code::Blocks Project Management Code::Blocks V2.1.20
Take care that the correct compiler is selected. The ’Full command line’ setting in the
Compiler Logging field outputs the complete information in the Build Log. In addition,
this output can be logged in a HTML file. For this purpose select ’Save build log to
HTML file when finished’. Furthermore, Code::Blocks offers a progress bar for the build
process in the Build Log window which can be activated via the ’Display build progress
bar’ setting.
Note:
With the shortcut Ctrl-Numepad-/ or with the menu ’Edit’ →’Special
commands’ →’Zoom’ →’Reset’ the original font size of the active file
in the editor is restored.
26 Code::Blocks
Code::Blocks V2.1.20 1.11 Tips for working with Code::Blocks
Note:
Most Linux window managers use ALT-LeftClickDrag to move a win-
dow, so you will have to disable this window manager behavior first
for block select to work.
Code::Blocks 27
1 Code::Blocks Project Management Code::Blocks V2.1.20
margin of the editor view. In the margin the beginning and the end of a folding point is
visible as vertical line. If you click the minus symbol with the left mouse button the code
snippet will be folded or unfolded. Via the menu ’Edit’ →’Folding’ you can select the
folding. In the editor you see folded code as continous horizontal line.
Note:
The folding style and the folding depth limit can be configured via
menu ’Settings’ →’Editor’ →’Folding’ .
Code::Blocks provides the folding feature also for preprocessor directives. To enable this
feature select ’Fold preprocessor commands’ via the menu ’Settings’ →’Editor’ in the
folding entry.
Another possibility is to set user defined folding points. The start of folding point is
entered as comment with a opening bracket and the end is market with a comment with
a closing bracket.
//{
code with user defined folding
//}
If you open a project in Code::Blocks the ’Search directories’ of your compiler and the
project, the sources and headers of your project are parsed. In addition the keywords
of the corresponding lexer file are parsed. The parse information is used for the auto
complete feature in Code::Blocks. Please check the settings for the editor if this feature
is enabled. The auto completion is accessible with the shortcut Ctrl-Space. Via the menu
’Settings’ →’Editor’ →’Syntax highlighting’ you can add user defined keywords to your
lexer.
If a file is removed from disk, but is still included in the project file <project>.cbp,
then this ’broken file’ will be shown a broken symbol in the project view. You should use
the menu ’Remove file from project’ instead of deleting files.
In large projects with a lot of subdirectories the search for broken files can be time con-
suming. Code::Blocks offers with the plug-in ThreadSearch (see section 2.21 on page 89)
a simple solution for this problem. If you enter a search expression in ThreadSearch and
select the option ’Project files’ or ’Workspace files’ , then ThreadSearch will parse all
files that are included in a project or workspace. If a broken file is found ThreadSerch will
issue an error with the missing file.
28 Code::Blocks
Code::Blocks V2.1.20 1.11 Tips for working with Code::Blocks
Example
For a library called <path>\libs\lib<name>.a, just write <name>. The linker with
the corresponding search paths will then include the libraries correctly.
Note:
Another way to include libraries is documented in section 2.15 on
page 74.
1.11.16 Autosave
Code::Blocks offers ways of automatically storing projects and source files, or of creating
backup copies. This feature can be activated in the menu ’Settings’ →’Environment’
→’Autosave’ . In doing so, ’Save to .save file’ should be specified as the method for
creating the backup copy.
Note:
If a user-defined program is assigned to a certain file extension, the
setting ’Disable Code::Blocks while the external program is running’
should be deactivated because otherwise Code::Blocks will be closed
whenever a file with this extension is opened.
Code::Blocks 29
1 Code::Blocks Project Management Code::Blocks V2.1.20
Windows
1. Find the Code::Blocks shortcut in the Desktop or Start menu.
2. Right click on the icon and select Properties.
3. Select the Shortcut tab.
4. Append the command line arguments you want to use to the end of the Target text
(behind the quote mark).
5. Run Code::Blocks by using the shortcut you edited.
Example:
codeblocks /na /nd --no-splash-screen --build <name>.cbp --target=’Release’
*nix
1. Launch a terminal client, such as XTerm, Gnome Terminal or Konsole.
2. Type ”codeblocks” and then append the command line arguments you want to use.
Note: Code::Blocks can not run on a real console, X11 must be running and you must
use a graphical terminal emulator.
Example:
codeblocks --no-splash-screen --debug-log
30 Code::Blocks
Code::Blocks V2.1.20 1.12 Code::Blocks at the command line
Code::Blocks 31
1 Code::Blocks Project Management Code::Blocks V2.1.20
Argument Function
Windows(Msys2,Wsl)
Windows
Linux, Unix, MacOS
--script=<str> Execute script file.
--file=<filename>[:ligne] Open file in Code::Blocks and optionally jump to a
specific line.
--dbg-config=<str> Selects the debugger config used for attaching (uses
the current selected target if omitted).
--dbg-attach=<str> String passed to the debugger plugin which is used
for attaching to a process.
> <build log file> Placed in the very last position of the command line,
this may be used to redirect standard output to log
file. This is not a Code::Blocks option as such, but
just a standard DOS/*nix shell output redirection.
1.13 Shortcuts
This section describes the shortcuts which are or can be used in Code::Blocks.
1.13.1 Introduction
This plugin can be used to bind one or more key shortcuts to the menu items.
Even if an IDE such as Code::Blocks is mainly handled by mouse, keyboard shortcuts
are nevertheless a very helpful way of speeding up and simplifying work processes. In the
below table, we have collected some of the available keyboard shortcuts.
1.13.2 Features
Includes a configuation panel and a complete system to view/remove/add/edit command
shortcuts.
Supports multiple key profiles and a complete load/save system is present.
Allows the users to customize any menu command they want, and define multiple key-
shortcut to each command.
1.13.3 Usage
The configuration page for the plugin can be accessed through the ’Settings’ →’Editor’
menu, and then selecting the Keyboard Shortcuts section.
Selecting a command, from the Commands tree, shows the current shortcuts for that
command on the right. In the picture Open... is selected and the default shortcut Ctrl-O
is displayed.
To add a new shortcut, for the selected command, follow these steps:
32 Code::Blocks
Code::Blocks V2.1.20 1.13 Shortcuts
1. Place the focus on the text box under New Shortcut and press the keys, for example
F3 or Ctrl-A.
2. Check Currently assigned to, if another command already has that shortcut you will
see it’s name there. If the text says None it’s safe.
3. Press Add to add the shortcut on the list.
4. Press OK on the dialog to save changes and return to editor.
1.13.4 Editor
Function Shortcut Key
Undo last action Ctrl+Z
Redo last action Ctrl+ Shift+Z
Cut selected text Ctrl+X
Copy selected text Ctrl+C
Paste text from clipboard Ctrl+V
Select all text Ctrl+A
Swap header / source F11
Comment highlighted code Ctrl+Shift+C
Uncomment highlighted code Ctrl+Shift+X
Duplicate line caret is on Ctrl+D
Auto+complete / Abbreviations Ctrl+Space/Ctrl+J
Show call tip Ctrl+Shift+Space
Swap line caret is on with line above it Ctrl+T
Toggle bookmark Ctrl+B
Code::Blocks 33
1 Code::Blocks Project Management Code::Blocks V2.1.20
This is a list of shortcuts provided by the Code::Blocks editor component. These shortcuts
cannot be rebound.
Function Shortcut Key
Magnify text size. Ctrl+Keypad ”+”
Reduce text size. Ctrl+Keypad ”-”
Restore text size to normal. Ctrl+Keypad ”/”
Cycle through recent files. Ctrl+Tab
Indent block. Tab
Dedent block. Shift+Tab
Delete to start of word. Ctrl+BackSpace
Delete to end of word. Ctrl+Delete
Delete to start of line. Ctrl+Shift+BackSpace
Delete to end of line. Ctrl+Shift+Delete
Go to start of document. Ctrl+Home
Extend selection to start of document. Ctrl+Shift+Home
Go to start of display line. Alt+Home
Extend selection to start of display line. Alt+Shift+Home
Go to end of document. Ctrl+End
Extend selection to end of document. Ctrl+Shift+End
Go to end of display line. Alt+End
Extend selection to end of display line. Alt+Shift+End
Expand or contract a fold point. Ctrl+Keypad ”*”
Create or delete a bookmark. Ctrl+F2
Go to next bookmark. F2
Select to next bookmark. Alt+F2
Find selection. Ctrl+F3
Find selection backwards. Ctrl+Shift+F3
Scroll up. Ctrl+Up
Scroll down. Ctrl+Down
Line cut. Ctrl+L
Line copy. Ctrl+Shift+T
Line delete. Ctrl+Shift+L
Line transpose with previous. Ctrl+T
Line duplicate. Ctrl+D
Find matching preprocessor conditional,
Ctrl+K
skipping nested ones.
Select to matching preprocessor conditional. Ctrl+Shift+K
Find matching preprocessor conditional backwards,
Ctrl+J
skipping nested ones.
34 Code::Blocks
Code::Blocks V2.1.20 1.13 Shortcuts
1.13.5 Files
This is a list of shortcuts provided by the Code::Blocks editor component. These shortcuts
cannot be rebound.
1.13.6 View
Code::Blocks 35
1 Code::Blocks Project Management Code::Blocks V2.1.20
1.13.7 Search
1.13.8 Build
1.13.9 Debug
36 Code::Blocks
Code::Blocks V2.1.20 1.14 Automatic source paths
1.14.1 Introduction
The functionality can be accessed over the ’Project’ →’Automatic source paths...’ menu
entry:
Code::Blocks 37
1 Code::Blocks Project Management Code::Blocks V2.1.20
Path : The base path in which files are searched for automatic import
Recursive : Search also in sub folders
Wildcard : Filter files according this wildcard (for example *.cpp: import only files ending
with .cpp
Add : Add an new path
Delete : Delete current selected path from the list
Edit : Edit current selected path from the list
Adding or Editing a path opens the Edit path dialog
38 Code::Blocks
Code::Blocks V2.1.20 1.14 Automatic source paths
3. Open the global variables dialog to select a global variable that is replaced and
overwatched by Code::Blocks
4. If this is checked all sub folder of this path are also overwatched
5. A list of wildcards separated by ’;’ for file extension that are imported for this glob
(ex. *.h to import only header files, *.cpp;*.h to import cpp and h files
6. Select targets where the files found in Path are added
7. Checkbox to select all/none targets
8. When this box is checked files will be added to the project file. The project file will
be modified every time a file is found. This allows to change properties of the file
(like target, or linker flags). The properties are saved in the project file and reloaded
when the project is reloaded. If this box is left unchecked the files are loaded when
Code::Blocks is running, but not saved to project file. With this unchecked file
properties can not be saved and will be lost.
1.14.3 Example
Lets assume that files in src are added/removed automatically by a third party software.
Adding now an automatic source folder in Code::Blocks will automatically add/remove
files if they are changed on the file system.
Code::Blocks 39
1 Code::Blocks Project Management Code::Blocks V2.1.20
40 Code::Blocks
2 Plugins
Most of the plugins described ib this chapter are also in the Wiki. Texts and figures have
been copied from the Wiki but adapted to be included in Latex documents (Miktex 2.9).
2.1 General
Code::Blocks’ features can be extend by using plugins. There are generally three types of
plugins:
Core plugins: developed and maintained by the core C::B team.
Contrib plugins: developed and maintained by the community and proven to be very
valuable. So they are integrated into the C::B SVN.
3rd party plugins: developed and maintained by the community but not (yet?) in the
C::B repository. Theses plugins often have their own repository or are being posted
(including the source code) in the forums.
If you are looking for plugins:
1. Look in the official release. Notice that the installer / package manager might require
you to enable some of the plugins specifically. So READ carefully.
2. Search the forums for announcements, especially the forums at [Link]
[Link]/[Link]/board,[Link].
3. There might be information on the Wiki concerning other plugins on this page and
here : [Link]
patches.
For Windows users, the default behavior of the current installer does not install contrib
plugins. You need to manually check the ”contrib plugin” checkbox when asked for selected
components to install. There is no way to install them manually afterwards.
If you are developing plugins: Surely you can work with plugin as you like, but here
are some suggestions:
Announce them in the plugin development board in the forums - including the (initial)
source code.
OR
Setup your own webpage (or use a file sharing platform) and post the link to the
sources/binaries/svn access in the plugin development board in the forums.
OR
Setup a repository, probably at BerliOS or SourceForge, post the link to the sources/bi-
naries/svn access in the plugin development board in the forums. Notice: This is very
convenient as attachments in our forum might be deleted from time to time. So it is not
safe to post source code in the forums.
2 Plugins Code::Blocks V2.1.20
THEN
Enter the plugins description on this page.
Announce the plugin using this template on [Link]
php/Template_for_plugin_announcement
2.2 Astyle
Artistic Style is a source code indenter, source code formatter, and source code beautifier
for the C, C++, C# programming languages. It can be used to select different styles of
coding rules within Code::Blocks.
When indenting source code, we as programmers have a tendency to use both spaces and
tab characters to create the wanted indentation. Moreover, some editors by default insert
spaces instead of tabs when pressing the tab key, and other editors have the ability to
prettify lines by automatically setting up the white space before the code on the line,
possibly inserting spaces in a code that up to now used only tabs for indentation.
Since the number of space characters shown on screen for each tab character in the source
code changes between editors, one of the standard problems programmers are facing when
moving from one editor to another is that code containing both spaces and tabs that was
up to now perfectly indented, suddenly becomes a mess to look at when changing to
another editor. Even if you as a programmer take care to ONLY use spaces or tabs,
looking at other people’s source code can still be problematic.
To address this problem, Artistic Style was created - a filter written in C++ that auto-
matically re-indents and re-formats C / C++ / C# source files.
42 Code::Blocks
Code::Blocks V2.1.20 2.3 AutoVersioning
Note:
When copying code, for example from the internet or a manual,
this code will automatically be adapted to the coding rules in
Code::Blocks.
2.3 AutoVersioning
An application versioning plug in that increments the version and build number of your
application every time a change has been made and stores it in version.h with easy to
use variable declarations. Also have a feature for committing changes a la SVN style, a
version scheme editor, a change log generator and more . . .
2.3.1 Introduction
The idea of the AutoVersioning plugin was made during the development of a pre-alpha
software that required the version info and status. Been to busy coding, without time to
maintain the version number, just decided to develop a plugin that could do the job with
little intervention as possible.
2.3.2 Features
Integrated scheme editor for changing the behavior of the auto incrementation of
version values.
2.3.3 Usage
Just go to ’Project’ →’Autoversioning’ menu. A pop up window like this will appear:
Code::Blocks 43
2 Plugins Code::Blocks V2.1.20
When hitting yes on the ask to configure message box, the main auto versioning configu-
ration dialog will open, to let you configure the version info of your project.
After configuring your project for auto versioning, the settings that you entered on the
configuration dialog will be stored on the project file, and a version.h file will be created.
For now, every time that you hit the ’Project’ →’Autoversioning’ menu the configuration
dialog will popup to let you edit your project version and versioning related settings,
unless you don’t save the new changes made by the plugin to the project file.
Here you just enter the corresponding version values or let the auto versioning plugin
increment them for you (see Figure 2.3 on page 45).
Minor Increments by 1 when the build number pass the barrier of build times, the value
is reset to 0 when it reach its maximum value.
Build Number (also equivalent to Release) - Increments by 1 every time that the revision
number is incremented.
Revision Increments randomly when the project has been modified and then compiled.
Status
Some fields to keep track of your software status with a list of predefined values for
convenience(see Figure 2.4 on page 45).
Scheme
Lets you edit how the plugin will increment the version values (see Figure 2.5 on page 46).
Minor maximum The maximum number that the Minor value can reach, after this value
is reached the Major is incremented by 1 and next time project is compiled the
Minor is set to 0.
44 Code::Blocks
Code::Blocks V2.1.20 2.3 AutoVersioning
Build Number maximum When the value is reached, the next time the project is com-
piled is set to 0. Put a 0 for unlimited.
Code::Blocks 45
2 Plugins Code::Blocks V2.1.20
Revision random maximum The revision increments by random numbers that you de-
cide, if you put here 1, the revision obviously will increment by 1.
Build times before incrementing Minor After successful changes to code and compila-
tion the build history will increment, and when it reaches this value the Minor will
increment.
Settings
Here you can set some settings of the auto versioning behavior (see Figure 2.6 on page 47).
Autoincrement Major and Minor Lets the plugin increments this values by you using
the scheme. If not marked only the Build Number and Revision will increment.
Create date declarations Create entries in the version.h file with dates and ubuntu
style version.
Do Auto Increment This tells the plugin to automatically increment the changes when
a modification is made, this incrementation will occur before compilation.
Ask to increment If marked, Do Auto Increment, it ask you before compilation (if changes
has been made) to increment the version values.
svn enabled Search for the svn revision and date in the current folder and generates the
correct entries in version.h
46 Code::Blocks
Code::Blocks V2.1.20 2.3 AutoVersioning
Changes Log
This lets you enter every change made to the project to generate a [Link] file
(see Figure 2.7 on page 47).
Code::Blocks 47
2 Plugins Code::Blocks V2.1.20
Show changes editor when incrementing version Will pop up the changes log editor
when incrementing the version.
Title Format A format able title with a list of predefined values.
void main ( ) {
s t d : : cout<<AutoVersion : : Major<<e n d l ;
}
Output of version.h
The generated header file. Here is a sample content of the file on c++ mode:
#i f n d e f VERSION H
#define VERSION H
namespace AutoVersion {
// Date V e r s i o n Types
static const char DATE [ ] = ” 15 ” ;
static const char MONTH[ ] = ” 09 ” ;
static const char YEAR [ ] = ” 2007 ” ;
static const double UBUNTU VERSION STYLE = 7 . 0 9 ;
// S o f t w a r e S t a t u s
s t a t i c const char STATUS [ ] = ” Pre=a l p h a ” ;
s t a t i c const char STATUS SHORT [ ] = ”pa” ;
// Standard V e r s i o n Type
s t a t i c const long MAJOR = 0 ;
s t a t i c const long MINOR = 1 0 ;
s t a t i c const long BUILD = 1 0 8 6 ;
s t a t i c const long REVISION = 6 3 4 9 ;
// M i s c e l l a n e o u s V e r s i o n Types
s t a t i c const long BUILDS COUNT = 1 9 8 4 ;
#d e f i n e RC FILEVERSION 0 , 1 0 , 1 0 8 6 , 6 3 4 9
#d e f i n e RC FILEVERSION STRING ” 0 , 1 0 , 1 0 8 6 , 6349\0 ”
s t a t i c const char FULLVERSION STRING [ ] = ” 0 . 1 0 . 1 0 8 6 . 6 3 4 9 ” ;
}
#endif //VERSION h
48 Code::Blocks
Code::Blocks V2.1.20 2.3 AutoVersioning
#i f n d e f VERSION H
#define VERSION H
// Date V e r s i o n Types
static const char DATE [ ] = ” 15 ” ;
static const char MONTH[ ] = ” 09 ” ;
static const char YEAR [ ] = ” 2007 ” ;
static const double UBUNTU VERSION STYLE = 7 . 0 9 ;
// S o f t w a r e S t a t u s
s t a t i c const char STATUS [ ] = ” Pre=a l p h a ” ;
s t a t i c const char STATUS SHORT [ ] = ”pa” ;
// Standard V e r s i o n Type
s t a t i c const long MAJOR = 0 ;
s t a t i c const long MINOR = 1 0 ;
s t a t i c const long BUILD = 1 0 8 6 ;
s t a t i c const long REVISION = 6 3 4 9 ;
// M i s c e l l a n e o u s V e r s i o n Types
s t a t i c const long BUILDS COUNT = 1 9 8 4 ;
#d e f i n e RC FILEVERSION 0 , 1 0 , 1 0 8 6 , 6 3 4 9
#d e f i n e RC FILEVERSION STRING ” 0 , 1 0 , 1 0 8 6 , 6349\0 ”
s t a t i c const char FULLVERSION STRING [ ] = ” 0 . 1 0 . 1 0 8 6 . 6 3 4 9 ” ;
#endif //VERSION h
Code::Blocks 49
2 Plugins Code::Blocks V2.1.20
r e l e a s e d v e r s i o n 0 . 7 . 3 4 o f AutoVersioning =Linux
Change l o g :
= Fixed : p o i n t e r d e c l a r a t i o n
=Bug : b l a h b l a h
02 September 2007
r e l e a s e d v e r s i o n 0 . 7 . 3 2 o f AutoVersioning =Linux
Change l o g :
=Documented some a r e a s o f t h e code
= R e o r g a n i z e d t h e code f o r r e a d a b i l i t y
01 September 2007
r e l e a s e d v e r s i o n 0 . 7 . 3 0 o f AutoVersioning =Linux
Change l o g :
= Ed i te d t h e change l o g window
= I f t h e change l o g windows i s l e a v e blank no c h a n g e s . t x t i s m o d i f i e d
The list of recent files is saved in a history. With the menu ’View’ →’Browse Tracker’
→’Clear All’ the history is cleared.
With the window ’Browsed Tabs’ you can navigate between the items of the recently
opened files using the menu entry ’View’ →’Browse Tracker’ →’Backward Ed/Forward
50 Code::Blocks
Code::Blocks V2.1.20 2.5 CodeSnippets
Ed’ or the shortcut Alt-Left/Alt-Right. The Browse Tracker menu is also accessible
as context menu. The markers are saved in the layout file <projectName>.bmarks
A common procedure when developing software is to struggle with a set of functions
which are implemented in different files. The BrowseTracks plug-in will help you solve
this problem by showing you the order in which the files were selected. You can then
comfortably navigate the function calls.
The plug-in allows even browse markers within each file in the Code::Blocks editor. The
cursor position is memorized for every file. You can set this markers using the menu item
’View’ →’ Browse Tracker’ →’ Set BrowseMarks’ or with selecting a line with the left
mouse button. A marker with . . . is shown in the left margin. With the menu ’View’
→’Browse Tracker’ →’Prev Mark/Next Mark’ or the shortcut Alt-up/Alt-down you
can navigate through the markers within a file. If you want to navigate in a file between
markers sorted by line numbers then just select the menu ’View’ →’Browse Tracker’
→’Sort BrowseMark’ .
With the ’Clear BrowseMark’ the marker in a selected line is removed. If a marker is set
for a line, holding left-mouse button down for 1/4 second while pressing the Ctrl key will
delete the marker for this line. Via the menu ’Clear All BrowseMarks’ or with a Ctrl-left
click on any unmarked line will reset the markers within a file.
The settings of the plug-in can be configured via the menu ’Settings’ →’Editor’ →’Browse
Tracker’ .
Mark Style Browse Marks are displayed per default as . . . within the margin. With the
setting ’Book Marks’ they will be displayed like Bookmarks as blue arrow in the
margin. With hide the display of Browse Marks is suppressed. Note : These options
have been deleted recently from the plugin but are still present in older Code::Blocks
versions. Only the blue arrow is still there.
Toggle Browse Mark key Markers can be set or removed either by a click with the left
mouse button or with a click while holding the Ctrl key.
Toggle Delay The duration of holding the left mouse button to enter the Browse Marker
mode.
Clear All BrowseMarks while holding Ctrl key either by a simple or a double click with
the left mouse button.
The configuration of the plug-in is stored in your application data directory in the file
[Link]. If you use the personality feature of Code::Blocks the configuration is read
from the file <personality>.conf.
2.5 CodeSnippets
The CodeSnippets plug-in makes it possible to structure text modules and links to files
according to categories in a tree view. The modules are used for storing often used files and
constructs in text modules and managing them in a central place. Imagine the following
situation: A number of frequently used source files are stored in different directories of the
Code::Blocks 51
2 Plugins Code::Blocks V2.1.20
file system. The CodeSnippets window provides the opportunity to create categories, and
below the categories, links to the required files. With these features, you can control the
access to the files independently from where they are stored within the file system, and
you can navigate quickly between the files without the need to search the whole system.
Note:
You can use Code::Blocks variables or environment variables in
file links e.g. $(VARNAME)/[Link] to parametrise a link in the
CodeSnippets browser.
The list of text modules and links can be stored in the CodeSnippets window by right-
clicking and selecting ’Save Index’ from the context menu. The file [Link]
which will be created by this procedure, can then be found in the codeblocks subdi-
rectory of your Documents and Settings\Application data directory in Win 7 (or an
equivalent path in the user profile, adapted to each OS). Under Linux, this information
is stored in the .codeblocks subdirectory of your HOME directory. The Code::Blocks
configuration files will be loaded during the next start-up. If you wish to save the content
of CodeSnippets at a different location, select the ’Save Index As’ entry. To load this file,
select ’Load Index File’ during the next start-up of Code::Blocks or include the direc-
tory in the ’Settings’ context menu under ’Snippet Folder’. The settings are saved in the
corresponding file [Link] in your application data.
For including a category, use the ’Add SubCategory’ menu. A category can contain Snip-
pets (text modules) or File Links. A text module is created via the ’Add Snippet’ command
in the context menu. The content is integrated into the text module as ’New snippet’ by
selecting the text passage in the Code::Blocks editor and dragging and dropping it onto
the module and the properties dialog pops up. Double-clicking the newly included entry
or selecting ’Edit Text’ will open an editor for the content.
Output of a text module is handled in Code::Blocks via the context menu command
’Apply’ or by dragging and dropping into the editor. Under Windows, the contents of a
Snippet can also be dragged and dropped into other applications. In the CodeSnippets
Browser you can copy a selected item with drag and drop to a different category.
Beyond this, text modules can be parametrised by <name> variables which can be ac-
cessed via $(name) (see Figure 2.9 on page 52). The values of the variables can be retrieved
in an entry field if the text module is called via the context menu command ’Apply’.
52 Code::Blocks
Code::Blocks V2.1.20 2.5 CodeSnippets
Besides the text modules, links to files can also be created. If, after having created a text
module, you click the context menu command ’Properties’, then you can select the link
target by clicking the ’Link target’ button. This procedure will automatically convert the
text module into a link to a file. In CodeSnippets, all text modules will be marked by a
T symbol, links to a file by an F symbol and urls by an U symbol. If you want to open a
selected file (link) in the codesnippets view just select the context menu ’Open File’ or
hold the ’Alt’ key and make a double click on the file.
Note:
You can add even url (e.g. [Link] in text mod-
ules. The url can be opened using the context menu ’Open Url’ or
using drag and drop to your favorite web browser.
With this setting, if open a link to a pdf file from the codesnippets view a pdf viewer will
be started automatically. This method makes it possible for a user to access files which
are spread over the whole network, such as cad data, layouts, documentations etc., with
the common applications, simply via the link. The content of the codesnippets is stored
in the file [Link], the configuration is stored in the file [Link]
in your application data directory. This ini file will, for example, contain the path of
the file [Link].
Code::Blocks supports the usage of different profiles. These profiles are called personal-
ities. Starting Code::Blocks with the command line option --personality=<profile>
will create a new or use an existing profile. Then the settings will not be stored in the
file [Link], but in <personality>.conf in your application data directory
instead. The Codesnippets plugin will then store its settings in a specific file named
<personality>.[Link]. Now, if you load a new content <[Link]> in
the Codesnippets settings via ’Load Index File’, this content will be stored in the corre-
sponding ini file. The advantage of this method lies in the fact that in case of different
profiles, different configurations for text modules and links can be managed.
The plug-in offers an additional search function for navigating between the categories
and Snippets. The scope for searching Snippets, categories or Snippets and categories
can be adjusted. By entering the required search expression, the corresponding entry is
automatically selected in the view. Figure 2.10 on page 54 shows a typical display in the
Code::Blocks 53
2 Plugins Code::Blocks V2.1.20
CodeSnippets window.
Note:
When using voluminous text modules, the content of these modules
should be saved in files via ’Convert to File Link’ in order to reduce
memory usage within the system. If you delete a codesnippet or file
link it will be moved to the category .trash; if you hold the Shift key
the item will be deleted.
Note:
Extracted from Wikipedia: Intelligent code completion is a context-
aware code completion feature in some programming environments
that speeds up the process of coding applications by reducing ty-
pos and other common mistakes. Attempts at this are usually done
through auto-completion popups while typing, querying parameters
of functions, query hints related to syntax errors. Intelligent code com-
pletion and related tools serve as documentation and disambiguation
for variable names, functions, and methods.
54 Code::Blocks
Code::Blocks V2.1.20 2.6 Code Completion in Code::Blocks
Note: This is the user document of Code Completion plugin. Only C/C++ language is
supported by this plugin (currently)...
Code::Blocks 55
2 Plugins Code::Blocks V2.1.20
clangd understands your C++ code and adds smart features to your editor:
code completion
compile errors
go-to-definition
go-to-implementation
find references
and more.
clangd is a language server that can work with your editor via a plugin.
Code::Blocks provides Clangd client as the needed plugin.
Clangd client additionally enhances the clangd server by providing:
call tips
function definitions
parameter definitions
previous and next function positioning
symbols browser
go-to-file
go-to-function
symbol renaming
NOTE: A Code::Blocks project is required for Clangd client.
Clangd client does not work with non-project translation units.
A project provides the necessary resources to interface between the Editor and the Clangd
server.
56 Code::Blocks
Code::Blocks V2.1.20 2.6 Code Completion in Code::Blocks
Restart Code::Blocks.
Note:
Clangd client is now included as a contrib plugin within the ”Nightly”
builds. Using a ”Nightly” build is the easiest way to update to
clangd client. Simply install the ”Nightly” and configure as specified
below.
See the Nightly builds at [Link]
php/board,[Link]
Code::Blocks 57
2 Plugins Code::Blocks V2.1.20
LLVM-<version>-[Link]
LLVM-<version>-[Link]
58 Code::Blocks
Code::Blocks V2.1.20 2.6 Code Completion in Code::Blocks
LLVM-<version>-[Link]
LLVM-<version>-[Link]
bin\[Link]
bin\[Link]
bin\[Link]
bin\vcruntime140_1.dll
”OR”
2. The second option is to intall the full Clang tool chain as follows:
a) Open the [Link] bash shell
b) Run the following command: pacman -S mingw-w64-clang-x86 64-toolchain
Code::Blocks 59
2 Plugins Code::Blocks V2.1.20
”OR”
2. The second option is to install the full Clang tool chain as follows:
a) Open the [Link] bash shell
b) Run the following command:
pacman -S mingw-w64-clang-i686-toolchain
[Link]
60 Code::Blocks
Code::Blocks V2.1.20 2.7 CScope
Installing the clangd package will usually give you a slightly older version.
Test this by issuing apt-get install --dry-run clangd
You can now configure clangd client plugin by following the above instructions at Con-
figuring clangd client (see subsubsection [Link] on page 56
If you prefer to install the entire LLVM/Clang package, for convenience, there is an
automatic installation script available that installs LLVM for you.
2.7 CScope
This paragraph is extracted from the cscope plugin in the wiki.
Although the parser within Cscope is targeted at C, it retains enough flexibility to provide
functionality with C++ (and Java) code.
Code::Blocks 61
2 Plugins Code::Blocks V2.1.20
[Link] Linux
Under Linux installing cscope should be as easy as calling your favorite package manager
and installing cscope. Code::Blocks should find the executable by default. If it can not
find the cscope executable please set it in ’Settings’ →’Environment’ →’CScope’ . You can
find the path to the cscope executable by typing locate cscope in your favorite terminal.
[Link] Windows
It is hard to find a precompiled binary for cscope on windows. The easiest solution is
to install msys2. Follow the instruction on the website [,→MSys2] to install msys2. After
installing and updating as described open the msys terminal and type pacman =S cscope.
This will install cscope from the global package repository.
Now you have to setup Code::Blocks:
Open Code::Blocks
’Settings’ →’Environment’ →’CScope’
Press the button with the ... dots
Search the [Link] executable. It is probably under
INSTALL DIRECTORY OF MSYS2\usr\bin\[Link]
Close the dialog with OK
Now you should be able to use the cscope functions in Code::Blocks (for ex. ”Find
functions calling XXXX”).
2.8 Doxyblocks
DoxyBlocks is a plugin for Code::Blocks that integrates doxygen into the IDE. It allows
you to create documentation, insert comment blocks and run HTML or CHM documents.
It also provides configuration of some of the more commonly used settings and access to
doxywizard for more detailed configuration.
The settings in the DoxyBlocks toolbar have the following meanings:
Insert a comment block at the current line. Additionally, DoxyBlocks will try to
intelligently read if a method exists on the line for which a comment is being added.
Ctrl-Alt-B
/* * \ b r i e f
*
* \param bar b o o l
* \ return void
*
*/
void MyClass : : Foo ( b o o l bar )
62 Code::Blocks
Code::Blocks V2.1.20 2.8 Doxyblocks
{
foo Bar ( bar ) ;
}
Code::Blocks 63
2 Plugins Code::Blocks V2.1.20
OUTPUT LANGUAGE Used to specify the language in which all documentation gen-
erated by doxygen is written. Doxygen will use this information to generate all
constant output in the proper language. The default language is English. Other
languages are supported.
More information in doxygen help files
64 Code::Blocks
Code::Blocks V2.1.20 2.11 FileManager and PowerShell Plugin
The dialog for choosing the active set for the current project is located in ’Project’
→’Properties’ →’EnvVar options’ .
Script binding
This plugin provides its functionality through a squirrel binding:
Return value Name Arguments Remarks
wxArrayString EnvvarGetEnvvarSetNames Returns all envvars sets
available
wxString EnvvarGetActiveSetName Returns the name of the
currently active set
(from config, /active set)
wxArrayString EnvVarGetEnvvarsBySetPath const wxString Returns the envvars of
set name an envvars set path in
the config
bool EnvvarSetExists const wxString Verifies if an envvars set
set name really exists in the config
bool EnvvarSetApply const wxString& Applies a specific envvar
set name, set from the config
bool even if active (without UI interaction)
void EnvvarSetDiscard const wxString Discards a specific envvar
set from the config
(without UI interaction)
bool EnvvarApply const wxString key, Applies a specific envvar
const wxString value
bool EnvvarDiscard const wxString key Discards an envvar
NOTE: The value arguments are automatically expanded from macros. You do not have
to call ReplaceMacros() on them.
Many other script functions are available. Have a look to [Link]
org/[Link]/Scripting_commands
Example
On windows in the post or pre build steps:
[ [ EnvvarApply ( ( ” t e s t ” ) , ( ” t e s t V a l u e ” ) ) ; ] ]
echo %t e s t%
Code::Blocks 65
2 Plugins Code::Blocks V2.1.20
In the ’Wildcard’ field you can enter a filter term for the file display. Leaving the field
empty or entering * results in all files being displayed. Entering *.c ;*. h, for example will
result in solely C sources and header files being displayed. Opening the pull-down field
will, again, list a history of the last entries.
Pressing the Shift key and clicking selects a group of files or directories, pressing the Ctrl
key and clicking selects multiple separate files or directories.
The following operations can be started via the context menu if one or multiple directories
are selected in the File Explorer:
Make Root defines the current directory as the root directory.
Add to Favorites sets a marker for the directory and stores it as a favourite. This function
allows you to navigate quickly between frequently used directories, also on different
network drives.
New File creates a new file in the selected directory.
New Directory creates a new subdirectory in the selected directory.
The following operations can be started via the context menu if one or multiple files or
directories are selected in the File Explorer:
Duplicate copies a file/directory and renames it.
66 Code::Blocks
Code::Blocks V2.1.20 2.11 FileManager and PowerShell Plugin
Copy To opens a dialog for entering the target directory in which the copied file/directory
is to be stored.
Show Hidden Files activates/deactivates the display of hidden system files. When acti-
vated, this menu entry is checkmarked.
The following operations can be started via the context menu if one or multiple files are
selected in the File Explorer:
Note:
The files/directories selected in the File Explorer can be accessed in
the PowerShell plugin via the mpaths variable.
User-defined functions can be specified via the menu command ’Settings’ →’Environment’
→’PowerShell’ . In the PowerShell mask, a new function which can be named at random,
is created via the ’New’ button. In the ’ShellCommand Executable’ field, the executable
program is stated, and in the field at the bottom of the window, additional parameters can
be passed to the program. By clicking the function in the context menu or the PowerShell
menu, the function is started and will then process the selected files/directories. The
output is redirected to a separate shell window.
For example a menu entry in ’PowerShell’ →’SVN’ and in the context menu is created
for ’SVN’. $le in this context means the file selected in the File Explorer, $mpath the
selected files or directories (see section 3.2 on page 96).
Add ; $ i n t e r p r e t e r add $ mpaths ; ; ;
This and every subsequent command will create a submenu, in this case called ’Extensions’
→’SVN’ →’Add’ . The context menu is extended accordingly. Clicking the command in
the context menu will make the SVN command add process the selected files/directories.
TortoiseSVN is a widespread SVN program with integration in the explorer. The program
[Link] of TortoiseSVN can be started in the command line and dispalys a
dialog to collect user input. So you can perform the commands, that are available as
context menu in the explorer also in the command line. Therefore you can integrate it
also a shell extension in Code::Blocks. For example the command
T o r t o i s e P r o c . exe /command : d i f f / path : $ f i l e
Code::Blocks 67
2 Plugins Code::Blocks V2.1.20
will diff a selected file in the Code::Blocks file explorer with the SVN base. See Figure 2.14
on page 68 how to integrate this command.
Note:
For files that are under SVN control the file explorer shows overlay
icons if they are actived via menu ’View’ →’SVN Decorators’ .
Example
You can use the file explorer to diff files or directories. Follow these steps:
1. Add the name via menu ’Settings’ →’Environment’ →’PowerShell’ . This is shown
as entry in the interpreter menu and the context menu.
2. Select the absolute path of Diff executable (e.g. kdiff3). The program is accessed
with the variable $interpreter .
3. Add parameters of the interpreter
D i f f ; $ i n t e r p r e t e r $ mpaths ; ; ;
This command will be executed using the selected files or directories as parameter. The
selection is accessed via the variable $mpaths. This is an easy way to diff files or directories.
Note:
The plug-in supports the use of Code::Blocks variables within the
shell extension.
$interpreter Call this executable.
68 Code::Blocks
Code::Blocks V2.1.20 2.12 HexEditor
Note:
The entries of shell extension are also available as context menu in
the Code::Blocks editor.
2.12 HexEditor
How a file can be opened in HexEditor within Code::Blocks.
1. ’File’ →’ Open with HexEditor’
2. Project Navigator context menu (’Open with’ →’ Hex editor’
3. Select the Tab Files in the Management Panel. By selecting a file in the FileManager
and executing the context menu ’Open With Hex editor’ this file is opened in
HexEditor.
Division of windows:
left is HexEditor view and right is the display as strings
Upper line: Current position (value in decimal/hex) and percentage (ratio of current
cursor position to whole file).
Buttons:
Search functions
Goto Button: Jump to an absolute position. Format in decimal or hex. Relative jump
forward or backward by specifying a sign.
Search: Search for hex patterns in the HexEditor view or for strings in the file preview.
Configuration of the number of columns: Exactly, Multiple of, Power of
Code::Blocks 69
2 Plugins Code::Blocks V2.1.20
Value Preview: Adds an additional view in HexEditor. For a selected value in HexEditor,
the value is also displayed as Word, Dword, Float, Double.
For example, move the cursor to the string view: Insert spaces with the Insert key. Delete
characters by pressing the Del key.
By entering numbers in the HexEditor view the values are overwritten and the preview
is updated.
For an efficient search in open files, Code::Blocks provides the so-called Incremental
Search. This search method is initiated for an open file via the menu ’Search’ →’Incremental
Search’ or by the keyboard shortcut Ctrl-I. The focus is then automatically set to the
search mask of the corresponding toolbar. As soon as you begin entering the search term,
the background of the search mask will be adjusted in accordance with the occurrence
of the term. If a hit is found in the active editor, the respective position in the text is
marked in colour. By default the current hit will be highlighted in green. This setting
can be changed via ’Settings’ →’ Editor’ →’ Incremental Search’ (see Figure 2.15 on
page 71). Pressing the Return key induces the search to proceed to the next occurrence
of the search string within the file. With Shift-Return the previous occurrence can be
selected. This functionality is not supported by Scintilla if the incremental search uses
regular expressions.
70 Code::Blocks
Code::Blocks V2.1.20 2.13 Incremental Search
If the search string cannot be found within the active file, this fact is highlighted by the
background of the search mask being displayed in red.
Deleting the text within the search mask of the Incremental Search toolbar.
Code::Blocks 71
2 Plugins Code::Blocks V2.1.20
Clicking this button results in all the occurrences of the search string within the
editor being highlighted in colour, instead of only the initial occurrence.
Activating this option restricts the search to the text passage marked within the
editor.
Note:
The standard settings of this toolbar can be configured in ’Settings’
→’Editor’ →’Incremental Search’ .
1. To create an empty diagram select the menu options ’File’ →’New’ →’Nassi Shnei-
derman diagram’ .
In an editor window highlight some code to create the diagram from. For example the
body of a function/method from the opening braces till the closing brace. Then right
click the selection and choose ’Nassi Shneiderman’ →’Create diagram’ (see Figure 2.16
on page 73).
You should get a new diagram (see Figure 2.17 on page 73).
From a definition of a function it is only able to parse the body, not the declaration.
72 Code::Blocks
Code::Blocks V2.1.20 2.14 NassiShneiderman plugin
Code::Blocks 73
2 Plugins Code::Blocks V2.1.20
[Link] Extensions
To be able to create diagrams from c/c++ switch statements, the selection does not
implicitly break before a case. The different cases are vertically aligned. Supports C
and C++.
2.15 LibFinder
If you want to use some libraries in your application, you have to configure your project to
use them. Such configuration process may be hard and annoying because each library can
use custom options scheme. Another problem is that configuration differs on platforms
which result in incompatibility between unix and windows projects.
LibFinder provides two major functionalities:
Searching for libraries installed on your system
Including library in your project with just few mouse clicks making project platform-
independent
74 Code::Blocks
Code::Blocks V2.1.20 2.15 LibFinder
When LibFinder scans for libraries, it uses special rules to detect presence of library. Each
set of rules is located in xml file. Currently LibFinder can search for wxWidgets 2.6/2.8,
Code::Blocks SDK and GLFW – the list will be extended in future.
Note:
To get more details on how to add library support into LibFinder,
read src/plugins/contrib/lib finder/lib finder/[Link]
in Code::Blocks sources.
After completing the scan, LibFinder shows the results (see Figure 2.19 on page 76).
In the list you check libraries which should be stored into LibFinder’s database. Note that
each library may have more than one valid configuration and settings added ealier are
more likely to be used while building projects.
Below the list you can select what to do with results of previous scans:
Do not clear previous results This option works like an update to existing results – it
adds new ones and updates those which already exist. This option is not recom-
mended.
Code::Blocks 75
2 Plugins Code::Blocks V2.1.20
Second option (Clear previous results for selected libraries) will clear all results for
libraries which are selected before adding new results. This is the recommended
option.
Clear all previous library settings when you select this option, LibFinder’s database will
be cleared before adding new results. It’s useful when you want to clean some invalid
LibFinder’s database.
Another option in this dialog is ’Set up Global Variables’ . When you check this option,
LibFinder will try automatically configure Global Variables which are also used to help
dealing with libraries.
If you have pkg-config installed on your system (it’s installed automatically on most linux
versions) LibFinder will also provide libraries from this tool. There is no need to perform
scanning for them – they are automatically loaded when Code::Blocks starts.
76 Code::Blocks
Code::Blocks V2.1.20 2.15 LibFinder
pane and click < button. To remove library from project, select it on the left pane and
click > button (see Figure 2.20 on page 77).
You can filter libraries known to LibFinder by providing search filter. The ’Show as Tree’
checkbox allows to switch between categorized and uncategorized view.
If you want to add library which is not available in LibFinder’s database, you may use
’Unknown Library’ field. Note that you should enter library’s shortcode (which usually
matches global variable name) or name of library in pkg-config. List of suggested short-
codes can be found at Global Variables. Using this option is recommended only when
preparing project to be built on other machines where such library exists and is properly
detected by LibFinder. You can access a global variable within Code::Blocks like:
$ (#GLOBAL VAR NAME. i n c l u d e )
Checking the ’Don’t setup automatically’ option will notify LibFinder that it should not
add libraries automatically while compiling this project. In such case, LibFinder can be
invoked from build script. Example of such script is generated and added to project by
pressing ’Add manual build script’ .
Code::Blocks 77
2 Plugins Code::Blocks V2.1.20
Such project becomes cross-platform. As long as used libs are defined in LibFinder’s
database, project’s build options will be automatically updated to match platform-specific
library settings.
2.16.1 Introduction
A plugin to check the spelling of strings and comments. The spelling gets checked during
typing. Additionally a thesaurus is provided. Both may be accessed on-demand by select-
ing the word in question, then choosing either Spelling... or Thesaurus... from the Edit
menu (the operation can be bound to a hot-key via the Keyboard Shortcuts plugin). The
context menu (right click the word) provides spelling suggestions.
2.16.2 Configuration
Configuration is in the menu ’Settings’ →’Editor’ . The spell check option are about half
way down the list on the left.
78 Code::Blocks
Code::Blocks V2.1.20 2.16 SpellChecker plugin
Path settings, Dictionaries The plugin is looking in this path for the dictionary files.
Path settings, Thesauri The plugin is looking in this path for the files needed by the
thesaurus.
Path settings, Bitmaps (Optional) The plugin is looking in this path for the flags to
show in the status bar.
Note:
You can use Macros in the above three path settings, such as
$(CODEBLOCKS)/share/codeblocks/SpellChecker. See Variable ex-
pansion for more details. This is quite convenient if you use portable
Code::Blocks.
2.16.3 Dictionaries
SpellChecker uses a library called hunspell. Hunspell is the spell checker of OpenOf-
[Link], Mozilla Firefox and other projects. Dictionaries available for those applications
are compatible with this plugin.
Open Office provides a collection of dictionaries for several languages and dialects to
download. The OOo 3.x extensions (*.oxt) are compressed archives which can be opened
with your favourite archiver (for example 7-Zip or File Roller). Copy the .aff file and the
.dic file to the directory configured in ’Path settings, Dictionaries’ (see above).
If you’re running Linux you’ve probably already got compatible dictionaries installed.
Look in /usr/share/hunspell or my choice is /usr/share/myspell/dicts. The reason I like
the myspell files is they already include thesaurus files which are named correctly to work
with the thesaurus, and everything is all in one location. Don’t copy these files. Just point
the spell checker to where the files are already located.
I understand on Windows, Firefox and Thunderbird also install compatible dictionary
files. These can be found in... C:\Program Files\Mozilla Firefox\dictionaries or
C:\Program Files\Mozilla Thunderbird\dictionaries. In addition, both OpenOf-
[Link] and LibreOffice install dictionary files to
C:\Program Files\(Open/Libre)Office\share\extensions\dict-*.
The Google Chrome browser also installs dictionaries, but they are .bdic format and the
Code::Blocks spell checker plugin will not work with them.
Code::Blocks 79
2 Plugins Code::Blocks V2.1.20
80 Code::Blocks
Code::Blocks V2.1.20 2.18 SVN Support
pdf The Portable Document Format can be opened by applications such as the Acrobat
Reader.
The support of the version control system SVN is included in the Code::Blocks plugin
TortoiseSVN. Via the menu ’TortoiseSVN’ →’Plugin settings’ you can configure the
accessible svn commands in the tab ’Integration’ .
Menu integration Add an entry TortoiseSVN with different settings in the menu bar.
Project manger Activate the TortoiseSVN commands in the context menu of the project
manager.
Editor Active the TortoiseSVN commands in the context menu of the editor.
In the plugin settings you can configure which svn commands are accessible via the menu
or the context menu. The tab integration provides the entry ’Edit main menu’ and ’Edit
popup menu’ to configure these commands.
Note:
The File Explorer in Code::Blocks uses different icon overlays for indi-
cating the svn status. The TortoiseSVN commands are included here
in the context menu.
Note:
The To-Do list can be docked in the message console. Select the option
’Include the To-Do list in the message pane’ via the menu ’Settings’
→’Environment’ .
If the sources are opened in Code::Blocks, a Todo can be added to the list via the context
menu command ’Add To-Do item’. A comment will be added in the selected line of the
source code.
Code::Blocks 81
2 Plugins Code::Blocks V2.1.20
When adding a To-Do, a dialog box will appear where the following settings can be made
(see Figure 2.23 on page 82).
User User name <user> in the operating system. Tasks for other users can also be created
here. In doing so, the corresponding user name has to be created by Add new. The
assignment of a Todo is then made via the selection of entries listed for the User.
Note:
Note that the Users have nothing to do with the Personalities used
in Code::Blocks.
Type By default, type is set to Todo.
Priority The importance of tasks can be expressed by priorities (1 - 9) in Code::Blocks.
82 Code::Blocks
Code::Blocks V2.1.20 2.20 Tools+
Position This setting specifies whether the comment is to be included before, after or at
the exact position of the cursor.
Comment Style A selection of formats for comments (e.g. doxygen).
2.20 Tools+
Creating a new tool is fairly simple, and can be completed in a few simple steps. First
open ’Tools(+)’ →’Configure Tools...’ to access the User-defined Tools dialog.
Tool Name
This is the name that will be displayed in the Tools(+) drop-down menu. It will also be
displayed as the tab name for tools that redirect to the Tools output window.
Command Line
Any valid command line function and switches can be placed here. Variable substitution
is also accepted. The following list contains the more useful variables (see section 3.2 on
page 96 for the full list).
$relfile, $file Respectively, the relative and absolute name of a selected file.
$reldir, $dir Respectively, the relative and absolute name of a selected directory.
$relpath, $path The relative and absolute name of the selected file or directory.
$mpaths A list of selected files or directories (absolute paths only).
$fname, $fext The name without extension and the extension without the name of the
selected file.
$inputstr{prompt} Prompts the user to enter a string of text which is substituted into
the command line.
Code::Blocks 83
2 Plugins Code::Blocks V2.1.20
Submenu/Tool2
Tool3
The command name will be used if this entry is blank. If the first character is a period,
the command will be hidden.
Context Menu Path
This controls the command’s placement in the right-click menu of the Projects and Files
tabs of the Management pane. The same rules of structure with the Tools Menu Path
apply here.
84 Code::Blocks
Code::Blocks V2.1.20 2.20 Tools+
Please note that the command will not show up in the context menu unless the Command
Line contains one or more of the following: $relle , $le , $reldir , $dir , $relpath, $path,
$fname, and $fext .
Output to
This determines where the output of the command will be redirected. The purpose and
function of the command will determine which is best to select. Tools Output Window
Tools that only output results command (and require no input) line generally use this
setting. The program will be run invisibly and any output will be redirected to the appro-
priate tab of the Tools Output Window. The text [DONE] will be added upon the tool’s
completion.
Code::Blocks 85
2 Plugins Code::Blocks V2.1.20
Note:
If the Tools Output window is open when Code::Blocks is closed, it
may trigger Code::Blocks to crash.
Code::Blocks Console
This will cause the program to be run through the executable cb console runner (the
same program that is launched after Build and run). This is generally used for command
line tools with more advanced user interactions, although GUI programs can also be used
(especially if the program is unstable and/or also leaves messages in the standard output).
Console runner will pause the window (prevent it from closing), display the run time, and
the exit code when the program finishes.
Standard Shell
This is the same as placing the command in a batch or shell script, then running it. The
program will run in whatever its default method is, and when it finishes, its window will
close. This setting is useful for running a program (for example a file or web browser) that
must remain open after Code::Blocks is closed.
Note:
As the Tools+ plugin is not yet complete, some functionality - specif-
ically Menu Priority and Environment Variables - are not available.
– Tools Menu
explorer /select,"$(PROJECTFILE)"
– Context Menu
86 Code::Blocks
Code::Blocks V2.1.20 2.20 Tools+
explorer /select,"$path"
Dolphin
– Tools Menu
dolphin --select "$(PROJECTFILE)"
– Context Menu
dolphin --select "$path"
Note:
The following three Context Menu commands only support folders
(but not files).
Nautilus
– Tools Menu
nautilus --no-desktop --browser "$(PROJECTDIR)"
– Context Menu
nautilus --no-desktop --browser "$dir"
Thunar
– Tools Menu
thunar "$(PROJECTDIR)"
– Context Menu
thunar "$dir"
PCMan File Manager
– Tools Menu
pcmanfm "$(PROJECTDIR)"
– Context Menu
pcmanfm "$dir"
Update Subversion directory
Windows
– Tools Menu
"path_to_svn\bin\svn" update "$inputstr{Directory}"
– Context Menu
"path_to_svn\bin\svn" update "$dir"
Code::Blocks 87
2 Plugins Code::Blocks V2.1.20
Linux
– Tools Menu
svn update "$inputstr{Directory}"
– Context Menu
svn update "$dir"
Export makefile
Note:
this uses the command line-tool cbp2make.
Windows
– Tools Menu
"path_to_cbp2make\cbp2make" -in "$(PROJECTFILE)"
Linux
– Tools Menu
"path_to_cbp2make/cbp2make" -in "$(PROJECTFILE)"
Compress active project to archive
Windows
– 7z or zip - Tools Menu (on a single line)
"path_to_7z\7z" a -t$if(zip == $inputstr{7z or zip?}){zip -mm=Deflate
-mmt=on -mx9 -mfb=128 -mpass=10}{7z -m0=LZMA -mx9
-md=64m -mfb=64 -ms=on} -sccUTF-8 "-w$(PROJECTDIR).."
"$(PROJECTDIR)..\$(PROJECT_NAME)" "$(PROJECTDIR)*"
– [Link] or tar.bz2 - Tools Menu (on a single line)
cmd /c ""path_to_7z\7z" a -ttar -mx0 -sccUTF-8 "-w$(PROJECTDIR).."
"$(PROJECTDIR)..\$(PROJECT_NAME)" "$(PROJECTDIR)*" &&
"path_to_7z\7z" a -t$if(gz == $inputstr{gz or bz2?}){gzip -mx9
-mfb=128 -mpass=10 -sccUTF-8 "-w$(PROJECTDIR).."
"$(PROJECTDIR)..\$(PROJECT_NAME).[Link]}{bzip2 -mmt=on -mx9
-md=900k -mpass=7 -sccUTF-8 "-w$(PROJECTDIR).."
"$(PROJECTDIR)..\$(PROJECT_NAME).tar.bz2}"
"$(PROJECTDIR)..\$(PROJECT_NAME).tar" &&
cmd /c del "$(PROJECTDIR)..\$(PROJECT_NAME).tar""
Note:
The Windows command line interpreter has been invoked directly
here (cmd /c), allowing for multiple commands to be chained in a
single line. However, this causes the command to fail to execute in
the Code::Blocks Console.
88 Code::Blocks
Code::Blocks V2.1.20 2.21 Thread Search
Linux
Note:
The scope of file extensions to be included in the search, is preset and
might have to be adjusted.
2.21.1 Features
ThreadSearch plugin offers the following features:
Multi-threaded ’Search in files’
Highly configurable
Contextual menu ’Find occurrences’ to start a search in files with the word under
cursor
2.21.2 Usage
1. Configure your search preferences (see Figure 2.29 on page 91)
Once the plugin is installed, there are 4 ways to run a search:
a) Type/Select a word in the search combo box and press enter or click on Search
on the Thread search panel of the Messages notebook.
Code::Blocks 89
2 Plugins Code::Blocks V2.1.20
b) Type/Select a word in the toolbar search combo box and press enter or click
on Search button.
c) Right click on any ’word’ in active editor and click on ’Find occurrences’.
d) Click on Search/Thread search to find the current word in active editor.
Note:
Items 1, 2 and 3 may not be available according to current configu-
ration.
2. Click again on the search button to cancel current search.
3. A single click on a result item displays it on the preview editor at right location.
4. A double click on a result item opens or set an editor in editors notebook at right
location.
2.21.3 Configuration
To access ThreadSearch plugin configuration panel click on (see Figure 2.29 on page 91):
1. Options button on Messages notebook Thread search panel.
2. Options button on Thread search toolbar.
3. Settings/Environment menu item and then on the Thread search item on the left
columns.
Note:
Items 1, 2 and 3 may not be available according to current configu-
ration.
90 Code::Blocks
Code::Blocks V2.1.20 2.21 Thread Search
2.21.4 Options
Whole word if checked, line matches search expression if search expression is found with
no alpha-numeric +'_' before and after.
Start word if checked, line matches search expression if search expression is found at the
beginning of a word, ie no alpha-numeric +'_' before search expression.
Match case if checked, the search is case sensitive.
Regular expression the search expression is a regular expression.
Note:
If you want to search for regular expressions like n you will have to set
the option ’Use Advanced RegEx searches’ via the menu ’Settings’
→’Editor’ →’General Settings’ .
Code::Blocks 91
2 Plugins Code::Blocks V2.1.20
Delete previous results at search begin If ThreadSearch is configured with ’Tree View’
then the search results will be listed hierarchically,
above the files which contain the search term are listed
within this list the line number and the corresponding content of the occurence
is displayed
If you search different terms the list will become confusing, therefore previous search
results can be cleared at search begin using this option.
Note:
In the list of occurences single items or all items can be deleted via
the context menu ’Delete item’ or ’Delete all items’ .
2.21.6 Layout
Display header in log window if checked, the header are displayed in the results list
control.
Note:
If unchecked, the columns are no longer resizeable but space is spared.
Draw lines between columns Draws lines between columns in list mode.
Show search widgets in ThreadSearch Messages panel If checked, only the results list
control and the preview editor are displayed. All other search widgets are hidden
(spares space).
Show code preview editor Code preview can be hidden either with this check box or
with a double click on the splitter window middle border. This is where it can be
shown again.
92 Code::Blocks
Code::Blocks V2.1.20 2.22 Code statistics
Based on the entries in the configuration mask, this simple plugin detects the proportions
of code, commentaries and blank lines for a project. The evaluation is called via the menu
command ’Plugins’ →’Code statistics’ .
Note:
Koders and it’s successor BlackDuck seem to have disappeared or
changed their website ! So this plugin does not work anymore. Waiting
for an update ...
Code::Blocks 93
2 Plugins Code::Blocks V2.1.20
This database search will help you find source code originating from other world-wide
projects of universities, consortiums and organisations such as Apache, Mozilla, Novell
Forge, SourceForge and many others, which can be re-used without having to reinvent
the wheel every time. Please observe the licence of the source code in each individual case.
Clicking the ’Search’ stats the search, the results of the NM program are displayed in a
separate window caleld ’SymTabs Result’. The name of the objects or libraries containing
the symbol are listed under the title ’NM’s Output’.
94 Code::Blocks
3 Variable Expansion
Code::Blocks differentiates between several types of variables. These types serve the pur-
pose of configuring the environment for creating a program, and at the same of improving
the maintainability and portability. Access to the Code::Blocks variables is achieved via
$<name>.
Environment Variable are set during the startup of Code::Blocks. They can modify sys-
tem environment variables such as PATH. This can be useful in cases where a defined
environment is necessary for the creation of projects. The settings for environment
variables in Code::Blocks are made at ’Settings’ →’Environment’ →’Environment
Variables’ .
Builtin Variables are predefined in Code::Blocks, and can be accessed via their names
(see section 3.2 on page 96 for details).
Command Macros This type of variables is used for controlling the build process. For
further information please refer to section 3.4 on page 100.
Custom Variables are user-defined variables which can be specified in the build options
of a project. Here you can, for example define your derivative as a variable MCU and
assign a corresponding value to it. Then set the compiler option -mcpu=$(MCU), and
Code::Blocks will automatically replace the content. By this method, the settings
for a project can be further parametrised.
Global Variables are mainly used for creating Code::Blocks from the sources or devel-
opments of wxWidgets applications. These variables have a very special meaning.
In contrast to all others if you setup such a variables and share your project file
with others that have *not* setup this GV Code::Blocks will ask the user to setup
the variable. This is a very easy way to ensure the ’other developer’ knows what to
setup easily. Code::Blocks will ask for all path’s usually necessary.
3.1 Syntax
Code::Blocks treats the following functionally identical character sequences inside pre-
build, post-build, or build steps as variables:
$VARIABLE
$(VARIABLE)
${VARIABLE}
%VARIABLE%
Variable names must consist of alphanumeric characters and are not case-sensitive. Vari-
ables starting with a single hash sign (#) are interpreted as global user variables (see
section 3.5 on page 101 for details). The names listed below are interpreted as built-in
types.
3 Variable Expansion Code::Blocks V2.1.20
Variables which are neither global user variables nor built-in types, will be replaced with
a value provided in the project file, or with an environment variable if the latter should
fail.
The use of these variables can follow the following example for the date :
#include "include/manager.h"
wxString strdate = Manager::Get()=>GetMacrosManager()=>ReplaceMacros(_T("$TODAY"));
Note:
Per-target definitions have precedence over per-project definitions.
$(ACTIVE EDITOR COLUMN Return the column of the current line in the active editor.
$(ACTIVE EDITOR DIRNAME) the directory containing the currently active file (relative
to the common top level path).
$(ACTIVE EDITOR STEM) The base name (without extension) of the currently active file.
96 Code::Blocks
Code::Blocks V2.1.20 3.2 List of available built-ins
$(ALL PROJECT FILES) A string containing the names of all files in the current project.
$(CODEBLOCKS), $(APP PATH), $(APPPATH), $(APP-PATH) The path to the currently run-
ning instance of Code::Blocks.
$(DATAPATH), $(DATA PATH), $(DATA-PATH) The ’shared’ directory of the currently run-
ning instance of Code::Blocks.
$(PLUGINS) The plugins directory of the currently running instance of Code::Blocks.
$(TARGET COMPILER DIR) The compiler installation directory so-called master path.
$(FOOBAR OUTPUT BASENAME) The output file’s base name (no path, no extension) of
a specific target.
$(FOOBAR PARAMETERS) A specific target’s execution parameters
$(TARGET OUTPUT BASENAME) The output file’s base name (no path, no extension) of
the current target.
$(TARGET CC), $(TARGET CPP), $(TARGET LD), $(TARGET LIB) The build tool executable
(compiler, linker, etc) of the current target.
$(TARGET COMPILER DIR) The current target’s build tool directory (compiler, linker,
etc).
Code::Blocks 97
3 Variable Expansion Code::Blocks V2.1.20
$(TDAY UTC), $(TODAY UTC), $(NOW UTC), $(NOW L UTC), $(WEEKDAY UTC) These are
identical to the preceding types, but are expressed relative to UTC.
$(DAYCOUNT) The number of the days passed since an arbitrarily chosen day zero (Jan-
uary 1, 2009). Useful as last component of a version/build number.
$(GET CONFIG DIR) Unix: /etc ; Windows: C:\Documents and Settings\All Users\Application
Data
$(GET USER CONFIG DIR) Unix: ; Windows: C:\Documents and Settings\username\Application
Data\appname
98 Code::Blocks
Code::Blocks V2.1.20 3.2 List of available built-ins
$(GET USER DATA DIR) Unix: /.appname ; Windows: C:\Documents and Settings\username\Applic
Data
$(GET USER LOCAL DATA DIR) Unix: /.appname ; Windows: C:\Documents and Settings\username\
Settings\Application Data\appname
$(GET TEMP DIR) ALL platforms: A writable, temporary directory
$TO NATIVE PATH{} convert to native path form the codeblocks instance is running on
Usage
$TO UNIX PATH{$(TARGET OUTPUT FILE)} returns the current target output file as unix
path
Note:
Please do note that neither the variable syntax variants %if(...) nor
$(if)(...) are supported for this construct.
Example
For example if you are using several platforms and you want to set different parameters
depending on the operating system. In the following code the script commands of [[ ]]
are evaluated and the <command> will be executed. This could be useful in a post-built
step (on a single line).
Code::Blocks 99
3 Variable Expansion Code::Blocks V2.1.20
Note:
Manipulating Code::Blocks state should be implemented rather with
a pre-build script than with a script.
The expression in backticks returns a list of all executables *.elf in any subdirectories.
The result of this expression can be used directly by objdump. Finally the output is piped
to a file named [Link]. Thus, processes can be automatted in a simple way without
having to program any loops.
Example using Script
The script text is replaced by any output generated by your script, or discarded in case
of a syntax error.
Since conditional evaluation runs prior to expanding scripts, conditional evaluation can be
used for preprocessor functionalities. Built-in variables (and user variables) are expanded
after scripts, so it is possible to reference variables in the output of a script.
[ [ p r i n t ( GetProjectManager ( ) . G e t A c t i v e P r o j e c t ( ) . G e t T i t l e ( ) ) ; ]]
inserts the title of the active project into the command line.
100 Code::Blocks
Code::Blocks V2.1.20 3.5 Global compiler variables
3.5.1 Synopsis
Working as a developer on a project which relies on 3rd party libraries involves a lot of
unnecessary repetitive tasks, such as setting up build variables according to the local file
system layout. In the case of project files, care must be taken to not accidentially commit
a locally modified copy. If one does not pay attention, this can happen easily for example
after changing a build flag to make a release build.
The concept of global compiler variables is a unique new solution for Code::Blocks which
addresses this problem. Global compiler variables allow you to set up a project once, and
any number of developers using any number of different file system layouts being able to
compile and develop this project. No local layout information ever needs to be changed
more than once.
Code::Blocks 101
3 Variable Expansion Code::Blocks V2.1.20
The member base resolves to the same value as the variable name uses without a member
(alias).
The members include and lib are by default aliases for base/include and base/lib , respec-
tively. However, a user can redefine them if another setup is desired.
The members cags and lags are empty by default and can be used to provide the ability
to feed the same consistent set of compiler/linker flags to all builds on one machine.
Code::Blocks allows you to define custom variable members in addition to the built-in
ones.
3.5.3 Constraints
Both set and global compiler variable names may not be empty, they must not con-
tain white space, must start with a letter and must consist of alphanumeric charac-
ters. Cyrillic or Chinese letters are not alphanumeric characters. If Code::Blocks is
given invalid character sequences as names, it might replace them without asking.
102 Code::Blocks
Code::Blocks V2.1.20 3.5 Global compiler variables
Every variable requires its base to be defined. Everything else is optional, but the
base is absolutely mandatory. If you don’t define a the base of a variable, it will not
be saved (no matter what other fields you have defined).
You may not define a custom member that has the same name as a built-in member.
Currently, the custom member will overwrite the built-in member, but in general,
the behaviour for this case is undefined. If ' libext ' is a custom member we can only
write $(#[Link] ) and not $(#variable)/libext.
Variable and member values may contain arbitrary character sequences, subject to
the following three constraints:
– You may not define a variable by a value that references the same variable or
any of its members
– You may not define a member by a value that references the same member
– You may not define a member or variable by a value that references the same
variable or member through a cyclic dependency.
Code::Blocks will detect the most obvious cases of recursive definitions (which may happen
by accident), but it will not perform an in-depth analysis of every possible abuse. If you
enter crap, then crap is what you will get; you are warned now.
Examples
Defining [Link] as $(#wx)/include is redundant, but perfectly legal Defining [Link]
as $(#[Link]) is illegal and will be detected by Code::Blocks Defining [Link] as
$(#[Link]) which again is defined as $(#[Link]) will create an infinite loop
Code::Blocks 103
3 Variable Expansion Code::Blocks V2.1.20
If you wish to switch to a different set of variables, you simply select a different set from
the scroll-down menu at the top of the dialog (see Figure 3.1 on page 102). Different sets
are not required to have the same variables, and identical variables in different sets are
not required to have the same values, or even the same custom members.
Another positive thing about sets is that if you have a dozen variables and you want to
have a new set with one of these variables pointing to a different location, you are not
required to re-enter all the data again. You can simply create a clone of your current set,
which will then duplicate all of your variables.
Deleting a set also deletes all variables in that set (but not in another set). The default
set is always present and cannot be deleted.
You can also export or import sets (since r13224 SVN version): files, with extension
.set, are text files containing a particular set. Those files are easily transferable between
users/computers.
All these options on sets are available with buttons ”Add”, ”Delete”, ”Clone”, ”Export”
and ”Import”, located at the top of the Global Variable Environment window (see Fig-
ure 3.1 on page 102).
104 Code::Blocks
Code::Blocks V2.1.20 3.5 Global compiler variables
Let’s take a standard Boost installation under Windows for an example. Generally, you
would expect a fictional package ACME to have its include files under ACME/include
and its libraries under ACME/lib. Optionally, it might place its headers into yet another
subfolder called acme. So after adding the correct paths to the compiler and linker options,
you would expect to #include <acme/acme.h> and link to libacme.a (or whatever it
happens to be).
Boost, however, installs headers into C:\Boost\include\boost-1 33 1\boost and its
libraries under C:\Boost\lib by default. It seems impossible to get this under one hood
without having to adjust everything on every new PC, especially if you have to work
under Linux or some other OS, too.
This is where the true power of global user variables is unveiled. When defining the value
of the #boost variable, you go one step further than usual. You define the member in-
clude as C:\Boost\include\boost-1 33 1\boost and the member lib as C:\Boost\lib,
respectively. Your projects using $(#[Link]) and $(#[Link]) will magically work
on every PC without any modifications. You don’t need to know why, you don’t want to
know why.
Code::Blocks 105
4 Working With Code::Blocks
This chapter deals with some basic knowledge to be able to work with Code::Blocks.
Some paragraphs, here directly taken from Wiki, overlap but with a slightly different
presentation with the content of the first chapter.
4.1.2 Workspace
The workspace is the top-level container item for organizing your projects. Since there
can be only one workspace open at a time, there really is no build order issue for them.
It’s only one, so it’s just built ;).
Use the menu ’Build’ →’Build workspace’ to build a workspace (i.e. all the projects
contained in it).
4.1.3 Projects
Here, things start getting interesting :).
Projects build order is different depending if the user has set project dependencies or not.
Please read on.
Without project dependencies
In this case, projects are built in the order of appearence, from top to bottom. Most
projects though (at least not the ”hello world” ones), would want to setup project depen-
4 Working With Code::Blocks Code::Blocks V2.1.20
dencies.
Using project dependencies
Project dependencies are a simple way to tell Code::Blocks that a given project ”depends”
on another (in the same workspace, always).
Thus imagine in your workspace you have a library project and an executable project
which depends on the library. Then you could (and should) tell Code::Blocks about this
dependency. To do this, you select ’Project’ →’Properties’ and click the ”Project’s de-
pendencies..” button.
Please notice that the dependency information is saved within the workspace file, not the
project file as it is a dependency between two projects within a workspace.
It is very easy to use this dialog. Select the project you want to add a dependency and
then put a checkmark on all projects that this project depends on. This will ensure that all
the projects you checked will be built before the project that depends on them, ensuring
a synchronized build.
Tip: You don’t have to close this dialog and launch the other project’s properties again
to set their dependencies. You can set all projects dependencies from this same dialog.
Just select a different project in the drop-down box :).
Some things to note:
Dependencies are set directly or indirectly. If project A depends directly on project
B and project B depends on project C, then project A indirectly depends on project
C too.
108 Code::Blocks
Code::Blocks V2.1.20 4.1 The build process of Code::Blocks
Code::Blocks is smart enough to watch out for circular dependencies and prohibit
them. A circular dependency is caused when project A depends directly or indirectly
on project B and project B depends directly or indirectly on project A.
Dependencies take effect either if building the whole workspace or a single project.
In this case, only the dependencies needed for the project you ’re building will be
built too.
1. If the user has selected a specific build target in the compiler toolbar’s drop-down
box, then only this build target is built. If project dependencies are setup for the
project containing this target, all projects it depends on will also build their target
with the same name. If no such target exists, that project is skipped.
2. If the virtual ”All” target is selected, then all targets in the project (and all the
projects it depends on) are built in order, top to bottom. There are a couple of
exceptions to this:
A target is not built with ”All” if the target option (in project properties
”Targets” page) ”Build this target with All” is not selected.
If no targets in the project have the above option selected, then no virtual
”All” target appears in the list.
In this step, the pre-build and post-build steps are also executed.
Code::Blocks 109
4 Working With Code::Blocks Code::Blocks V2.1.20
The variables specified in the article Variable expansion (chapter 3 on page 95) can be
used in the scripts to get things like target output directory, project directory, target type
and others.
Here’s a breakdown of the pre/post build steps execution order for an imaginary project
with two targets (Debug/Release):
1. Project pre-build steps
a) Target ”Debug” pre-build steps
b) Target ”Debug” compile files
c) Target ”Debug” link files and generate binary output
d) Target ”Debug” post-build steps (see notes below)
e) Target ”Release” pre-build steps
f) Target ”Release” compile files
g) Target ”Release” link files and generate binary output
h) Target ”Release” post-build steps (see notes below)
2. Project post-build steps
I hope this is self-explaining :)
Note:
Pre-build steps are always ran. Post-build steps will run only if the
project/target they ’re attached to is not up-to-date (i.e. is going to
be built). You can change this by selecting ”Always execute, even if
target is up to date” in the build options.
Script Samples
Post-build script that copies the output file into the folder C:\Program\bin in Windows:
cmd / c copy ” $ (PROJECT DIR) $ (TARGET OUTPUT FILE) ” ”C: \ Program \ b i n ”
110 Code::Blocks
Code::Blocks V2.1.20 4.2 Creating a New Project
Launch the Project Wizard through ’File’ →’New’ →’Project...’ to start a new project.
Here there are many pre-configured templates for various types of projects, including
the option to create custom templates. Select Console application, as this is the most
common for general purposes, and click Go.
Note:
red text instead of black text below any of the icons signifies it is
using a customized wizard script.
The console application wizard will appear next. Continue through the menus, selecting
C++ when prompted for a language. In the next screen, give the project a name and
type or select a destination folder. As seen below, Code::Blocks will generate the remaining
entries from these two.
Code::Blocks 111
4 Working With Code::Blocks Code::Blocks V2.1.20
Finally, the wizard will ask if this project should use the default compiler (normally
GCC) and the two default builds: Debug and Release. All of these settings are fine.
Press finish and the project will be generated. The main window will turn gray, but that
is not a problem, the source file needs only to be opened. In the Projects tab of the
Management pane on the left expand the folders and double click on the source file
[Link] to open it in the editor.
112 Code::Blocks
Code::Blocks V2.1.20 4.2 Creating a New Project
Note:
it is generally improper programming style to create a function this
small; it is done here to give a simple example.
To add the new file to the project, bring up the file template wizard through either ’File’
→’New’ →’File...’ or ’Main Toolbar’ →’New file (button)’ →’File...’ Use the menu
’Build’ →’Build workspace’ to build a workspace (i.e. all the projects contained in it).
Select C/C++ source and click Go. Continue through the following dialogs very much
like the original project creation, selecting C++ when prompted for a language. On the
final page, you will be presented with several options. The first box will determine the new
filename and location (as noted, the full path is required). You may optionally use the ...
button to bring up a file browser window to save the file’s location. Checking Add file
to active project will store the filename in the Sources folder of the Projects tab of
the Management panel. Checking any of the build targets will alert Code::Blocks that
the file should be compiled and linked into the selected target(s). This can be useful if, for
example, the file contains debug specific code, as it will allow the inclusion to (or exclusion
from) the appropriate build target(s). In this example, however, the hello function is of
Code::Blocks 113
4 Working With Code::Blocks Code::Blocks V2.1.20
key importance, and is required in each target, so select all the boxes and click Finish to
generate the file.
The newly created file should open automatically; if it does not, open it by double clicking
on its file in the Projects tab of the Management panel. Now add in code for the
function [Link] will call.
[Link]
#include <i o s t r e a m >
u s i n g namespace s t d ;
void h e l l o ( )
{
c o u t << ” H e l l o world ! ” << e n d l ;
}
Now that the hello() function is in a separate file, the function must be declared for
[Link] to use it. Launch a plain text editor (for example Notepad or Gedit), and add
the following code:
hello.h
#i f n d e f HELLO H INCLUDED
#define HELLO H INCLUDED
void h e l l o ( ) ;
114 Code::Blocks
Code::Blocks V2.1.20 4.2 Creating a New Project
Save this file as a header (hello.h) in the same directory as the other source files in this
project. Back in Code::Blocks, click ’Project’ →’Add files...’ to open a file browser. Here
you may select one or multiple files (using combinations of Ctrl and Shift). (The option
’Project’ →’Add files recursively...’ will search through all the subdirectories in the given
folder, selecting the relevant files for inclusion.) Select hello.h, and click Open to bring
up a dialog requesting to which build targets the file(s) should belong. For this example,
select both targets.
Note:
if the current project has only one build target, this dialog will be
skipped.
Returning to the main source ([Link]), include the header file and replace the cout
function to match the new setup of the project.
[Link]
#include ” h e l l o . h”
int main ( )
{
hello ();
return 0 ;
}
Press Ctrl-F9, ’Build’ →’Build’ , or ’Compiler Toolbar’ →’Build (button - the gear)’ to
compile the project. If the following output is generated in the build log (in the bottom
panel) then all steps were followed correctly.
============== B u i l d : Debug i n HelloWorld ===============
Code::Blocks 115
4 Working With Code::Blocks Code::Blocks V2.1.20
The executable may now be run by either clicking the Run button or hitting Ctrl-F10.
Note:
the option F9 (for build and run) combines these commands, and may
be more useful in some situations.
See the build process of Code::Blocks for what occurs behind the scenes during a compile.
Removing a file
Using the above steps, add a new C++ source file, [Link], to the project. Removing
this unneeded file from the project is straightforward. Simply right-click on [Link]
in the Projects tab of the Management pane and select Remove file from project.
Note:
removing a file from a project does not physically delete it;
Code::Blocks only removes it from the project management.
116 Code::Blocks
Code::Blocks V2.1.20 4.2 Creating a New Project
’Open Project’ →’Properties...’ to access the main properties of the active project, Hel-
loWorld. Most of the settings on the first tab, Project settings, are rarely changed.
Title: allows the name of the project to be changed. If Platforms: is changed to some-
thing other than its default All, Code::Blocks will only allow the project to build on the
selected targets. This is useful if, for example, the source code contains Windows API, and
would therefore be invalid anywhere but Windows (or any other operating system specific
situations). The Makefile: options are used only if the project should use a makefile in-
stead of Code::Blocks’ internal build system (see Code::Blocks and Makefiles [section 4.5
on page 129] for further details).
Switch to the Build targets tab. Click Add to create a new build target and name
it Release Small. The highlight in the left hand column should automatically switch
to the new target (if not, click on it to change the focus). As the default setting for
Type: - ”GUI application” - is incorrect for the HelloWorld program, change it to
”Console application” via the drop-down list. The output filename [Link] is
fine except in that it will cause the executable to be output in the main directory. Add
the path ”bin\ReleaseSmall\” (Windows) or ”bin/ReleaseSmall/” (Linux) in front of it to
change the directory (it is a relative path from the root of the project). The Execution
working dir: refers to where the program will be executed when Run or Build and
run are selected. The default setting ”.” is fine (it refers to the project’s directory).
The Objects output dir: needs to be changed to ”obj\ReleaseSmall\” (Windows) or
”obj/ReleaseSmall/” (Linux) in order to be consistent with the remainder of the project.
The Build target files: currently has nothing selected. This is a problem, as nothing
will be compiled if this target is built. Check all the boxes.
Code::Blocks 117
4 Working With Code::Blocks Code::Blocks V2.1.20
The next step is to change the target’s settings. Click Build options... to access the
settings. The first tab the comes up has a series of compiler flags accessible through check
boxes. Select ”Strip all symbols from binary” and ”Optimize generated code for size”.
The flags here contain many of the more common options, however, custom arguments
may be passed. Switch to the Other options sub-tab and add the following switches:
= fno = r t t i
= fno = e x c e p t i o n s
=f f u n c t i o n =s e c t i o n s
=f d a t a = s e c t i o n s
=f l t o
Now switch to the Linker settings tab. The Link libraries: box provides a spot to
add various libraries (for example, wxmsw28u for the Windows Unicode version of the
wxWidgets monolithic dll). This program does not require any such libraries. The custom
switches from the previous step require their link-time counterparts. Add
=f l t o
=Os
=Wl,== gc = s e c t i o n s
= shared = l i b g c c
= shared = l i b s t d c++
118 Code::Blocks
Code::Blocks V2.1.20 4.3 Debugging with Code::Blocks
to the Other linker options: tab. (For further details on what these switches do, see
the GCC documentation on optimization options and linker options.)
Virtual Targets
Click OK to accept these changes and return to the previous dialog. Now that there are
two release builds, it will take two separate runs of Build or Build and run to compile
both. Fortunately, Code::Blocks provides the option to chain multiple builds together.
Click Virtual targets..., then Add. Name the virtual target Releases and click OK. In
the right-hand Build targets contained box, select both Release and Release small.
Close out of this box and hit OK on the main window.
The virtual target ”Releases” will now be available from the Compiler Toolbar; building
this should result in the following output.
============== B u i l d : R e l e a s e i n HelloWorld ===============
Code::Blocks 119
4 Working With Code::Blocks Code::Blocks V2.1.20
Make sure that the project is compiled with the -g (debugging symbols) compiler option
on, and the -s (strip symbols) option off. This ensures that the executable has debug
symbols included.
Compiler optimization switches should be turned off, stripping symbols (-s) must be
turned off.
Keep in mind that you may have to re-build your project as up-to-date object files might
not be re-compiled with -g otherwise. Please be aware that in compilers other than GCC,
-g and/or -s might be a different switch (-s might not be available at all).
In version 10.05
Note:
It’s a very old version. You should no more use it
120 Code::Blocks
Code::Blocks V2.1.20 4.3 Debugging with Code::Blocks
The list of watches can be saved to a file and later re-loaded. To do so, right click in the
list of watches and select ”save watch file” (and ”load watch file” to re-load them again).
Code::Blocks 121
4 Working With Code::Blocks Code::Blocks V2.1.20
1. Click in the empty last row in the watches window, type the name of the variable
(or full expression) and hit enter.
2. While the debugger has stopped on a breakpoint select a variable name or full
expression, right click to open the context menu and then select ”Add watch ’ex-
pression’”.
The automatic inclusion of local variables and function arguments have being reimple-
mented in 13.12.
You have to right-click on a frame in the ”call stack” debug window and select ”Switch
to this frame”.
122 Code::Blocks
Code::Blocks V2.1.20 4.3 Debugging with Code::Blocks
Find the line containing the variable to be watched. Set a breakpoint in a position that
will allow you to observe the variable value.
Run the debugger until the breakpoint is reached. Right click the variable to set a watch
in the Watch Window.
Breakpoints may also be toggled with a left click in the left editor margin.
4.3.5 Notes
Script support
Code::Blocks natively use squirrel script language to deal with gdb, see: Debugger scripts
(section 4.4 on page 125). As gdb 7.x support python pretty printer, so, it can also
use gdb(with python support) to show some complex variable values. see forum thread
unofficial MinGW GDB gdb with python released and Use GDB python under Codeblocks
Code::Blocks 123
4 Working With Code::Blocks Code::Blocks V2.1.20
To debug your program you need to setup a project. Single file programs (without asso-
ciated project) are not supported.
Breakpoints could not work if the path/folder you’ve placed your project contains spaces
or other special characters. To be safe use English letters, digits and ’ ’.
Forking
If your application uses the ’fork’ system call you’ll have trouble stopping the debugged
program or setting breakpoints on the fly. Here is a link explaining the forking modes of
GDB: [Link]
From gdb 6.8 released on April 2008, it supports many features which does not exist
in early versions. You can update by installing binaries from SourceForge MinGW64
packages.
Note:
TDM-Mingw package was a good choice until 5.1 version, but devel-
opment is now abandonned.
Use 32bit CDB for 32bit programs and 64bit CDB for 64bit programs
It seems that debugging a 32bit program with 64bit CDB doesn’t work on Windows 7
(and more?), but 32bit CDB works perfectly.
Note:
This should no longer be the case with Code::Blocks rev>=10920. See
the ticket for details: #429
If your are still using the MinGW and gdb 6.7 from 8.02 setup files, setting breakpoints
in the constructor will not work. Here are some tricks.
Breakpoints do not work in constructors or destructors in GDB 6.7 and earlier version.
They do, however, work in routines called from them. This is an early GDB restriction,
not a bug. So you could do something like:
124 Code::Blocks
Code::Blocks V2.1.20 4.4 Debugger scripts
...and place a breakpoint in ”DebugCtorDtor” at the line "int i = 0;". The debugger
will break at that line. If you then step the debugger (’Menu Debug’ →’Next Line’ ;
or alternatively F7) you’ll reach the code in the constructor/destructor (”is initialized =
true/false;”).
Code::Blocks 125
4 Working With Code::Blocks Code::Blocks V2.1.20
Look at the image above, this will give a brief introduction of how the debugger script
works. For example, you want to view the variable ”msg”. There are two handshake
between the debugger plugin and gdb.
First, the debugger plugin sends a command to gdb to query the type of msg
w h a t i s msg
Secondly, the debugger checks that wxString is already registered, and sends the command
output / c msg . m pchData [ 0 ]@( ( wxStringData * ) msg . m pchData =1)=>nDataLength
126 Code::Blocks
Code::Blocks V2.1.20 4.4 Debugger scripts
Let’s see how this works. Everything is inside a single file in the scripts/ folder, named
gdb [Link] :). Support for more (user-defined) scripts is planned for the future.
1. when GDB is launched. It calls the script function RegisterTypes() to register all
user-defined types known by the Code::Blocks’ debugger.
2. whenever GDB encounters your variable type, it calls the script functions specific
to this datatype (registered in RegisterTypes() - more on that below).
That’s the overview. Let’s dissect the shipped gdb [Link] and see how it adds
std :: string support to GDB.
// R e g i s t e r s new t y p e s with d r i v e r
function RegisterTypes ( driver )
{
// signature :
// d r i v e r . R e g i s t e r T y p e ( type name , regex , e v a l f u n c , p a r s e f u n c ) ;
// STL S t r i n g
d r i v e r . RegisterType (
T ( ”STL S t r i n g ” ) ,
T ( ” [ ˆ [ : alnum : ] ]+ s t r i n g [ ˆ [ : alnum : ] ] * ” ) ,
T(” Evaluate StlString ” ) ,
T(” Parse StlString ”)
);
}
The ”driver” parameter is the debugger driver but you don’t need to care about it :)
(currently this only works with GDB). This class contains a single method: RegisterType.
Here’s its C++ declaration:
void GDB driver : : R e g i s t e r T y p e ( const wxString& name , const wxString& regex ,
const wxString& e v a l f u n c , const wxString& p a r s e f u n c )
So, in the above script code, the ”STL String” (just a name - doesn’t matter what)
type is registered, providing a regular expression string for the debugger plugin to match
against and, finally, it provides the names of the two mandatory functions needed for each
registered type:
Code::Blocks 127
4 Working With Code::Blocks Code::Blocks V2.1.20
1. evaluation function: this must return a command understood by the actual debugger
(GDB in this case). For the ”STL string”, the evaluate function returns an GDB
”output” command which will be executed by the GDB debugger.
2. parser function: once the debugger runs the command returned by the evaluation
function, it passes its result to this function for further processing. What this func-
tion returns, is what is actually diplayed by Code::Blocks (usually in the watches
window or in a tooltip).
Let’s see the evaluation function for std :: string :
f u n c t i o n E v a l u a t e S t l S t r i n g ( type , a s t r , s t a r t , count )
{
l o c a l oper = T ( ” . ” ) ;
l o c a l r e s u l t = T ( ” output ” ) + a s t r + o p e r + T ( ” c s t r ( ) [ ” )
+ s t a r t + T ( ” ]@” ) ;
i f ( count != 0 )
r e s u l t = r e s u l t + count ;
else
r e s u l t = r e s u l t + a s t r + oper + T ( ” s i z e ( ) ” ) ;
return r e s u l t ;
}
I’m not going to explain what this function returns. I’ll just tell you that it returns a
GDB command that will make GDB print the actual std :: string ’s contents. Yes, you need
to know your debugger and its commands before you try to extend it.
What I will tell you though, is what those function arguments are.
type: the datatype, e.g. ”char*”, ”const string”, etc.
a_str: the name of the variable GDB is trying to evaluate.
start: the start offset (used for arrays).
count: the count starting from the start offset (used for arrays).
Let’s see the relevant parser function now:
function Parse StlString ( a str , start )
{
// n o t h i n g n e e d s t o be done
return a s t r ;
}
a_str: the returned string when GDB ran the command returned by the evaluation
function. In the case of std :: string , it’s the contents of the string.
start: the start offset (used for arrays).
128 Code::Blocks
Code::Blocks V2.1.20 4.5 Code::Blocks and Makefiles
Well, in this example, nothing needs to be done. ”a_str” already contains the std: string ’s
contents so we just return it :)
I suggest you study how wxString is registered in that same file, as a more complex
example.
Code::Blocks 129
4 Working With Code::Blocks Code::Blocks V2.1.20
Fortunately CB has another feature that can come to your rescue. If you go to menu
’Settings’ →’Compiler and Debugger’ , scroll the tabs horizontally to the right end and
you will find the tab ’other settings’. In there click on the tick box for ’Save build to
HTML ...’. This will cause CB to create, at build time, an HTML file that records all the
build commands.
Note:
this way to create an html buid file does not exist in recent CB version,
but there are other solutions
If you compile (without using a makefile - so if you’ve already reset everything - sorry) the
default wxWwidgets minimum program, you can see the compiler and linker commands
that produce this file.
Assuming that you are going to use this as the basis for your project, you can use the
content of the HTML file produced as the basis of your makefile.
You can’t just copy it from the HTML viewer in CB (there’s no such facility in CB) but
you can load the file into a browser or editor and copy it from there. It can be found in
your project directory with <the_same_name_as_your_project>_build_log.HTML. Sadly
it will require a little tweaking as shown below.
Here’s a copy of a build file for the basic Wxwidgets program as described above.
Note:
for a better lisibility, long lines have been split. The ^ sign indicates
a continuation line in DOS mode, and \ sign indicates a continuation
line in a makefile. But you should have commands on only one line
as long as you remove continuation line signs
130 Code::Blocks
Code::Blocks V2.1.20 4.5 Code::Blocks and Makefiles
The above can be converted to the makefile below. I have deliberately left it fairly close
to the HTML file output.
Incpath1 = C:\PF\wxWidgets2.8\include
Incpath2 = C:\PF\wxWidgets2.8\contrib\include
Incpath3 = C:\PF\wxWidgets2.8\lib\gcc_dll\mswud
Libpath = C:\PF\wxWidgets2.8\lib\gcc_dll
CXX = mingw32-g++.exe
obj\Debug\testMain.o : C:\Development\test\[Link]
$(CXX) $(flags) -I$(Incpath1) -I$(Incpath2) -I$(Incpath3) \
-c C:\Development\test\[Link] -o obj\Debug\testMain.o
obj\Debug\testApp.o : C:\Development\test\[Link]
$(CXX) $(flags) -I$(Incpath1) -I$(Incpath2) -I$(Incpath3) \
-c C:\Development\test\[Link] -o obj\Debug\testApp.o
obj\Debug\[Link] : C:\Development\test\[Link]
windres -I$(Incpath1) -I$(Incpath2) -I$(Incpath3) \
-iC:\Development\test\[Link] -oobj\Debug\[Link]
Code::Blocks 131
4 Working With Code::Blocks Code::Blocks V2.1.20
I have written a generic makefile which I have only tested on Windows Vista but that
should work with any project started as described above. You have to change the name
of the project and set the paths as appropriate (you will probably only need to change
Ppath and WXpath).
#paths for Project (Ppath) Object files (Opath) and binary path (Bpath)
Ppath := C:\Development\$(Proj)
Opath := obj\$(Version)
Bpath := bin\$(Version)
CXX = mingw32-g++.exe
$(Proj).exe : $(Obj)
$(CXX) -L$(Libpath) -o $(Bpath)\$(Proj).exe $(Obj) -lwxmsw28ud -mwindows
132 Code::Blocks
Code::Blocks V2.1.20 4.6 Cbp2make Utility
$(Opath)\$(Proj)Main.o : $(Ppath)\$(Proj)[Link]
$(CXX) $(flags) -I$(IncWX) -I$(IncCON) -I$(IncMSW) -c $^ -o $@
$(Opath)\$(Proj)App.o : C:\Development\$(Proj)\$(Proj)[Link]
$(CXX) $(flags) -I$(IncWX) -I$(IncCON) -I$(IncMSW) -c $^ -o $@
$(Opath)\[Link] : C:\Development\$(Proj)\[Link]
windres -I$(IncWX) -I$(IncCON) -I$(IncMSW) -i$^ -o $@
.PHONEY : clean
clean:
del $(Bpath)\$(Proj).exe $(Obj) $(Opath)\[Link]
Note:
exporting a makefile of a Code::Blocks project is indirectly possible.
This can be achieved with cbp2make utility (see the description in
section 4.6 on page 133 and/or a usage exemple via Tool+ subsec-
tion 2.20.1 on page 88.
4.5.2 Complements
By default, Code::Blocks builds a ”Release” and a ”Debug” target. In your Makefile,
these targets may be not present. But may be you have an ”All” target (or ”all”). You
can rename in Code::Blocks the target (or add one) with this name given in the Makefile.
More, your Makefile builds the executable with a specific name in a specific folder.
You should adjust in Code::Blocks the path and the name of the executable. Like that,
Code::Blocks, as it does not know nor analyse the Makefile, will find the executable, and
the Execute Green arrow in the menu can work (or Ctrl-F10).
Note:
Cbp2make is not a Code::Blocks plugin, but a full console application,
located in the main Code::Blocks directory, to generate makefile(s)
from the internal Code::Blocks generating system
4.6.1 About
”cbp2make” is a stand-alone build tool that allows you to generate makefile(s) for GNU
Make out of Code::Blocks IDE project or workspace file. (See also [Link]
[Link]/[Link]/topic,[Link])
Code::Blocks 133
4 Working With Code::Blocks Code::Blocks V2.1.20
4.6.2 Usage
Create makefile for a single project or workspace
Let’s assume you have a project ”my [Link]” and you need a makefile for this project.
In this simplest case all you have to do is:
cbp2make = i n m y p r o j e c t . cbp
”cbp2make” will append ”.unix” or ”.windows” or ”.mac” suffix to makefile name for each
platform respectively.
Create makefile for multiple projects or workspaces
If you have more than one independent project or workspace, you can process them at
once, but you will need a text file containing the list of projects, e.g., ”[Link]”, with
one project filename per line.
m y p r o j e c t . cbp
m y o t h e r p r o j e c t . cbp
4.6.3 Configuration
Some installation-specific or project-specific options, primarily toolchain settings, can be
saved to a configuration file. By default (since rev.110 ), cbp2make does not save any
settings to a configuration file unless the user explicitly specifies the "==cong" option.
A configuration file can be either global (stored in user profile / home directory) or local
(stored in current directory).
134 Code::Blocks
Code::Blocks V2.1.20 4.6 Cbp2make Utility
Please, keep in mind that since cbp2make is in early stage of development, an old config-
uration file may become incompatible with new tool version and it may be necessary to
update it manually or initialize a new one.
Initialization
cbp2make == c o n f i g o p t i o n s == g l o b a l
cbp2make == c o n f i g o p t i o n s == l o c a l
Later use
When cbp2make is invoked, first it tries to load a local configuration file. If a local con-
figuration is missing, next attempt will be to load a global one. If this attempt is not
successful either, the default built-in configuration is used. Configuration lookup order
can be overridden with "==local" or "==global" command line options. If one of options
is supplied to cbp2make, non-specified configuration is not picked up even if the specified
one is missing and non-specified do exists.
Manage toolchains:
Code::Blocks 135
4 Working With Code::Blocks Code::Blocks V2.1.20
Tool types:
Manage platforms:
Manage options:
136 Code::Blocks
Code::Blocks V2.1.20 4.6 Cbp2make Utility
Common options:
Options
"Makefile generation"
Code::Blocks 137
4 Working With Code::Blocks Code::Blocks V2.1.20
projects;
Code::Blocks interface can be presented in your own language. Many of the strings used
internally in Code::Blocks interface are introduced with a wxWidgets macro : . Strings
that do not change with the language are normally introduced by the macro wxT() or T().
To obtain a Code::Blocks interface presented in your own language, you must simply tell
to Code::Blocks that a language file is available. To be understandable by Code::Blocks,
it must be a .mo file obtained after ”compilation” of a .po file. Such files are available on
the forum for ”French” and in Launchpad web site for a wider set of languages.
In the translation page choose ”View All languages”, at the bottom, right.
Old translations have been imported in that new page, only the most used languages
(currently 14 languages). On request, it’s possible to add new languages (but translators
will have a little bit more work !).
Sorry for that, but original translators names have been lost in many cases :-[.
French language has the greatest number of translated strings. The template (.pot file)
has been updated for recent svn versions and Launchpad contain the translation work
done until now. For Russian language, a quite recent web page has also been used but is
not up to date. Many translations need to be approved, but I’m not the right guy to do
that !
The launchpad page is opened as ”structured”. So you should be able to propose new
translations or to correct them. In some cases, they should be approved by somebody
before publication.
I’ll try to maintain the ”template” when new English strings will be available.
138 Code::Blocks
Code::Blocks V2.1.20 4.7 Code::Blocks Interface Internationalization
You (translators) should be able to participate. You only need to have (or create) a
launchpad (Ubuntu) account.
Other users can request a download for the .po or .mo file. It’s this last one (.mo file), the
binary form, that you can use to obtain Code::Blocks interface in your own language : sim-
ply put it in your ”codeblocks installation directory”/share/CodeBlocks/locale/”language
string” (for me, on Windows, it’s
C:\Program Files\CodeBlocks wx32 64\share\CodeBlocks\locale\fr FR. Then in the
menu Settings/Environment.../View you should be able to choose the language.
Some more details for using translated menu strings in Code::Blocks.
For users of translations only :
Download the .mo format file in the requested language button. The launchpad name may
be something like : de LC MESSAGES All [Link] (here for german).
You should put this file inside your codeblocks installation directory.
On Windows, it’s something like :
C:\Program Files (x86)\CodeBlocks\share\CodeBlocks\locale\xxxx for 32 bits
or
C:\Program Files\CodeBlocks\share\CodeBlocks\locale\xxxx for 64 bits.
Path under Linux is quite similar.
xxxx has to be adapted to your language. It’s :
de DE for German,
es ES for Spanish,
fr FR for French,
it IT for Italian,
lt LT for Lithuanian,
nl NL for Dutch,
pl PL for Polish,
pt BR for Portuguese Brazilian,
pt PT for Portuguese,
ru RU for Russian,
si for Sinhalese,
zh CN for Chinese simplified,
zh TW for Chinese traditional.
Create the sub-directories if needed. Then place your downloaded .mo file here. You can
leave the filename as it is or only keep the first letters (as you want), but keep the extension
.mo.
Code::Blocks 139
4 Working With Code::Blocks Code::Blocks V2.1.20
4.8.1 Introduction
As you may already know, Code::Blocks is designed mainly for C/C++ development.
This means that when it ”sees” C/C++ files in your project it knows how to compile
and link them to generate the resulting binary output. What about other types of files
though? You may want to compile java or python files but, unfortunately, Code::Blocks
knows nothing about them...
And there’s this other case: in real world projects, it’s not unusual for some of the files
belonging to a project to be auto-generated. This is done through the use of another
program/script that possibly takes an input file and generates one (or more) files based
on that input. Code::Blocks, unfortunately, can’t handle them either...
Or can it?
The answer is: ....... (drum-rolling) ........ (ta-da) ......... It sure can!.
Code::Blocks has been updated so it can be configured to recognize non C/C++ files and
act accordingly on them during the build process. This article will describe those changes
and provide a simple but real world example of usage.
140 Code::Blocks
Code::Blocks V2.1.204.8 Code::Blocks Adding support for non C/C++ files to the build system
For starters, the command line macros are now paired with a list of source file extensions.
So each command line macro (like the ”Compile single file to object file”) can now hold
different macros depending on the source file extension. This is the core of the new func-
tionality: by adding a new command-extension pair, you effectively add support for these
extension(s) to the build system!
Another thing that also got added was the ability to keep a list of files the custom
command will generate (for each command-extension pair). These generated files are then
Code::Blocks 141
4 Working With Code::Blocks Code::Blocks V2.1.20
automatically shown in the project tree, become part of the build process, etc. In other
words, they are dynamically - and transparently - affecting the project. If you find this
confusing, have a look at the provided example and things will clear up :).
4.8.3 Examples
Let’s see an example already
Here comes a real world example. I recently worked on a side project that required me to
use SWIG. What the swig program does, in simple words, is take a special interface file
(usually *.i) as input and, based on this input, it generates a C/C++ file to include in
your project. This sounds like the perfect scenario to use as an example here :).
For any file with extension i, use the above macro to process (compile) it. Also lets
Code::Blocks know that this macro will create a new file, named $le_dir /$le_name.cpp.
With this info at hand, Code::Blocks will now do the following auto-magically when you
add any *.i file to a project:
Add the generated file(s) also to the project (even if they don’t yet exist).
Will display the file under the new ”Auto-generated” tree folder (if files categoriza-
tion is enabled).
Will also schedule all the generated files for processing (compiling) after the *.i file
is processed.
Will still track dependencies so when the *.i file is changed, its generated files will
be re-generated too.
142 Code::Blocks
Code::Blocks V2.1.204.8 Code::Blocks Adding support for non C/C++ files to the build system
Code::Blocks 143
4 Working With Code::Blocks Code::Blocks V2.1.20
and has not been updated for a while, you may encounter some missing keywords or other
things, but it works. If needed, you can modify files in your installation to adjust them
to your needs.
Of course, you’ll need to have installed a Rust/Cargo compiler.
For Windows users, if you use and have already msys2 toolchain installed on your PC,
it’s quite easy to obtain:
Use pacman to download and install a rust package:
pacman =S mingw=w64=x86_64=rust,
which install rustc, cargo, and other tools inside the \bin sub-folder (by default in
C:\msys64\mingw64) for a 64 bit installation;
Note: There is an other package, mingw-w64-x86 64-rustup, but it seems to use
other tools more adapted to Visual Studio.
Next time you’ll start Code::Blocks, it will ask you to configure the environment
variable $(#rust). Simply enter the path where [Link] is located (see above the
default value but without entering the \bin sub-folder);
You are now ready to use the rust template to create and run your Rust programs.
144 Code::Blocks
Code::Blocks V2.1.20 4.10 File formats description
e.g. wxmsw32ud and/or a version string for a specific library version, e.g. wxmsw32ud.
A library entry in the linker setup that incorporates all three examples would look like
this:
wxmsw$(WX_VERSION)$(WX_UNICODE)$(WX_DEBUG)
WX_VERSION=32
WX_DEBUG=d
WX_UNICODE=u
Code::Blocks 145
4 Working With Code::Blocks Code::Blocks V2.1.20
Workspace file
The workspace XML file is a very simple one.
A workspace is a collection of projects. Essentially the workspace file does exactly that:
describes a collection of projects. But let’s see the contents of a sample workspace:
<?xml version=” 1 . 0 ” e n c o d i n g=”UTF=8” standalone=” y e s ” ?>
<C o d e B l o c k s w o r k s p a c e f i l e>
<Workspace t i t l e =” Test Workspace ”>
<P r o j e c t f i l e n a m e=” T e s t C o n s o l e / T e s t C o n s o l e . cbp ” a c t i v e=” 1 ”>
<Depends f i l e n a m e=” TestLib / TestLib . cbp ” />
</ P r o j e c t>
<P r o j e c t f i l e n a m e=” TestLib / TestLib . cbp ” />
</ Workspace>
</ C o d e B l o c k s w o r k s p a c e f i l e>
This XML text defines the workspace named ”Test Workspace” containing two projects:
TestConsole/[Link] and
TestLib/[Link]
146 Code::Blocks
Code::Blocks V2.1.20 4.11 Dynamic or Static Linking
TestConsole project. That attribute appears only when its value equals to ”1” and in only
one ”Project” element inside the workspace. All it does is define which of the workspace
projects will be the active one by default, when opening the workspace in Code::Blocks.
That’s all.
Modern compilers/linkers generally produce dynamic linked codes by default. This means
that executables need to load and use some dynamic libraries also called shared libraries
(.dll files in Windows world, .so files in Linux world).
In the Windows world, those dlls are for example libstdc ++=[Link], libgcc_s_seh=[Link],
libwinpthread=[Link], libgfortran =[Link], libgomp=[Link]...
When the code is executed from inside Code::Blocks, it’s not a problem, because Code::Blocks
adds for his own usage the path to these libraries. These paths are set in the compil-
er/linker configuration settings.
It’s also possible to link codes statically (linked with .a or .lib files). Simply add to
compiler/linker options like -static -static-libgcc -static-libstdc++ as found in
compiler options box and eventually add some others to your own static libraries. Stat-
ically linked codes contain all that is needed at execution. This may be a good solution
if you share or distribute this executable with other computers and you will have less
problems with non concordant compiler updates.
The main advantage of dynamic linking is that it produces smaller executables than stat-
ically ones. More, if you execute simultaneously several codes using the same dynamic
libraries, they are loaded in memory only once.
When the code is executed outside Code::Blocks, the operating system (OS) has to know
where these libraries are stored: the operating system may not find them. This informa-
tion is not stored inside your executable. So you have to help the OS a little bit.
On Linux, you can add the dynamic libraries path to the system environment variable
LD_LIBRARY_PATH.
On Windows, you can also add the path to the environment variable PATH (the system
one or the user one). You can also copy the needed dlls in the same folder where your
executable is located. It may be a nice solution when you distribute your code to install
it on an other PC who has a different compiler installed, a different path access or no
compiler at all. But don’t forget any dlls.
Generally, on Windows (at least for MinGW), this path is the same as the folder where
[Link] and/or g++.exe is located (for C or C++ language). Adding this path to the
system environment variable PATH, is a convenient solution, but may be not the best
Code::Blocks 147
4 Working With Code::Blocks Code::Blocks V2.1.20
way, particularly if you have several compilers installed on your system, more if you have
both 32 bit and 64 bit compilers. As told previously, you can add a copy of the necessary
dlls in the same folder than your executable: this is a good solution to distribute your
code, but you need to add all the necessary dlls. An other solution, on your local PC is
to create a small batch file (.bat or .cmd) where on the first line you add the correct path
to the needed dlls.
Example:
Suppose you have an executable named my [Link] somewhere in a folder, and your
compiler is installed in C:\msys64\mingw64\bin. Create in the folder of your executable
a my [Link] file containing:
s e t PATH=C: \ msys64 \mingw64\ b i n ;%PATH%
m y e x c u t a b l e . exe
148 Code::Blocks
5 Installing and Configuring CodeBlocks with
MinGW
This chapter describes how to install and configure Code::Blocks. Install process is here
described for Windows, but may be adapted to other OS.
Run the installer, it’s a standard installer for Windows; just press Next after reading
each screen.
If you’re planning installing a compiler after you’ve installed Code::Blocks, read the
information provided in the installer.
If you downloaded the installer which doesn’t come with MinGW, you may have to
configure the compiler manually (usually Code::Blocks’ auto detects the compiler).
We’ll see in the next section how to install and configure an other compiler.
Notes:
It is possible to use a nightly build from the Forum. This builds does not come
bundled with a compiler!! You need to install a compiler by yourself (if you have not
already one). Before installing please have a look at [Link]
org/[Link]/topic,[Link]
5 Installing and Configuring CodeBlocks with MinGW Code::Blocks V2.1.20
5.2.1 Overview
A compiler toolchain is what Code::Blocks uses to turn the code you type into it into
numbers that the computer understands. As a compiler toolchain is a very complex un-
dertaking it is not part of Code::Blocks itself but rather is a separate project that
Code::Blocks then uses. The kind of compiler toolchains talked about on this page are
”MinGW” toolchains. Which means ”Minimalist GNU for Windows.” And ”GNU” ex-
pands to ”GNU’s Not Unix.” More information about the GNU project can be found on
the GNU Home Page.
For most MinGW-based compiler toolchains, having your toolchain in your PATH is im-
portant because it means that during development the toolchain libraries will be accessible
by default to your programs as you develop them and also makes it easier to use utilities
such as CMake as they will be able to find your compiler toolchain. When you actually
distribute your programs to other computers then you will copy the needed .dll files out
of your toolchain directory and include them as part of your installer. On your machine
they are in your PATH so you always have them, on your users computers they won’t
have the compiler toolchain so there you provide the .dll files with your program.
150 Code::Blocks
Code::Blocks V2.1.20 5.2 Configuring MinGW
Code::Blocks 151
5 Installing and Configuring CodeBlocks with MinGW Code::Blocks V2.1.20
Note:
Multilib versions are able to produce 32 or 64 bit code, useful if you
need to produce executables for both environments. Other versions
need to have 2 separated tool chains to produce 32 or 64 bit code.
These two tool chains can coexist without problems on the same sys-
tem.
152 Code::Blocks
Code::Blocks V2.1.20 5.2 Configuring MinGW
Note:
Among the Msys2 packages, there are some that install Code::Blocks
64 bits. They are based on more recent svn versions than
those of the official Code::Blocks website, but not necessar-
ily the very latest svn version. This can be interesting if you
don’t want to compile Code::Blocks yourself or even use a
“Nightly” version release. See [Link]
mingw-w64-codeblocks or [,→MSys2-CodeBlocks]: the packages dif-
fer in the compiler used to generate Code::Blocks and its dependencies
(dlls, utilities, etc.). Be consistent in your choices, but Msys2 will help
you.. You are not obliged to use the same compiler for your own pro-
grams, but it may make life easier for you in the future.
Code::Blocks 153
5 Installing and Configuring CodeBlocks with MinGW Code::Blocks V2.1.20
And then under the ”Toolchain executables” tab (red arrow), click on the ellipsis (”...”,
blue arrow) and choose the root directory where you installed MinGW (64-bit here). Once
you have that directory chosen, in the ”Program Files” sub-tab (green arrow) area fill out
the fields as shown. If you aren’t using the MinGW 64-bit toolchain there might be minor
variation in the executable names. If you choose the blue arrow ellipsis first then for each
ellipsis you click on under ”Program Files” you will already be in your MinGW 64-bit bin
directory where the actual programs are.
154 Code::Blocks
Code::Blocks V2.1.20 5.2 Configuring MinGW
Note:
To configure a new compiler, gfortran for example, enter [Link]
in the 3 first text fields in the tab ”Program Files”, or the exact name
as it is in your distribution.
Code::Blocks 155
5 Installing and Configuring CodeBlocks with MinGW Code::Blocks V2.1.20
Choose your default debugger (red arrow), and then fill in the Executable path for it as
shown for MinGW 64-bit (blue arrow).
Summary
You now have a Code::Blocks environment that is configured to use MinGW 64-bit prop-
erly. Using this guide as a template you can easily set up alternative compiler toolchains
no matter the source - just follow the same basic procedure.
Development Tools
Normally you should not need many of these tools. ZIP is convenient, especially when:
building Code::Blocks itself, is often already included with MinGW, but other than that
these tools only serve specialized purposes.
156 Code::Blocks
Code::Blocks V2.1.20 5.3 Nightly version of Code::Blocks on Windows
Note:
Don’t use [Link] version provided by Msys2 (installed via pacman -S
zip) to build Code::Blocks: it has apparently problems with standard
backslashs used in Windows paths.
Before we describe what the builds contain, it might be better to start with what the
nightly builds DO NOT contain. For starters ask yourself the question : what is Code::Blocks?
Well it’s an IDE (Integrated Development Environment), it means it integrates different
tools and makes them work together. So Code::Blocks is NOT a compiler (nor MS, nor
Borland, nor GCC), it is not a debugger (nor MS, nor GDB), it is not a makefile system
! So these components are NOT part of Code::Blocks, and therefore they are also not
part of the nightly build distributions. However several of the mentioned development
components can be combined to work together nicely through Code::Blocks. For example,
you can plug-in the GCC compiler and GDB debugger and compile and debug your hand
written applications.
Code::Blocks itself is being compiled with GCC, on windows this is done by using the
MinGW port. Since CB is a multi-threaded application it needs supporting routines pro-
viding it the multi-threading functionalities. This is provided by means of the MinGW
port, more specifically the ”[Link]”, in every post announcing a new nightly build
you can find a link to download this dll. Code::Blocks has a GUI (Graphical User Inter-
face). There are several ways to create a GUI: you can code by using the core Windows
API (works only on Windows) or you can use MS-MFC (works only on Windows) or you
can use some 3rd party abstraction of GUI’s, like QT, wxWidgets, Tk, ...
Code::Blocks uses wxWidgets, next to GUI abstraction, wxWidgets brings many more
abstractions (strings, files, streams, sockets, ...) and the good thing is : wxWidgets brings
these abstractions for many different platforms (Windows, Linux, Apple, ...). This means
Code::Blocks needs to be equipped with the real functionalities from wxWidgets (say the
binary code doing the actual work), this is being achieved through a dll : ”wxmsw32u gcc [Link]”
(17.12 was built with ”wxmsw28u gcc [Link]”). Again on every announcement post of a
new nightly build you can find a download link for this dll and other prerequisites.
When, on Windows, you install an official version with MinGW included (the recom-
mended version), you’ll find a MinGW directory in C:\Program Files\codeblocks. If
it works well here for most of your usages, it’s not the best place, at least because there
is a space inside the path name and this space may trouble some of the components of
MinGW. So, on Windows, move this MinGW directory to C:, for example. You can even
rename it MinGW32 for a 32 bit toolchain version or MinGW64 for a 64 bit version.
As told previously, a good solution to install a nightly is first to install an official version,
then to configure and try it. Like that, your configuration files, associations, shortcuts,
Code::Blocks 157
5 Installing and Configuring CodeBlocks with MinGW Code::Blocks V2.1.20
will be correctly set and they’ll be kept for your nightly install. The link to find last
nightlies is [Link]
If you install your nightly above a 20.03 or 25.03 version, you need to follow carefully this
procedure because a few things have changed, at least they are compiled in 64 bits with
a recent compiler, a different wxWidgets version and need some complementary dlls.
Normally, you won’t have such kind of problems with a 25.03 version.
Unzip the downloaded nightly and copy all the files in your codeblocks subdirectory.
If you have moved your MinGW subdirectory elsewhere, you can first erase all the
contents of the codeblocks subdirectory to be sure that you won’t mix versions. One
exception : if you have installed in this subdirectory some specific things, as for
example localization files, don’t erase them.
Unzip the wxWidgets dlls found with your nightly. You can install them directly in
the codeblocks directory or for a larger usage, in the bin sub-directory of MinGW.
Check that this bin subdirectory is in your PATH. It should be there if you had
installed an official CB version with it’s installer.
Unzip the prerequisites dlls. You can install them directly in the codeblocks direc-
tory. Here too, for a larger usage, you can install them in the bin sub-directory of
MinGW or any other directory accessible via your PATH variable. But take care,
because they may be already present there, but in a different version, or compiled
with an other MinGW version. In this case, it’s better to keep them in codeblocks
sub-directory for a private usage and to avoid problems due to mixing MinGW
versions.
Note:
wxWidgets and prerequisites dlls does not change so often. So, if you
install a nightly over a previous one, it’s not always necessary to
update them. Read carefully the forum topic on this specific nightly.
158 Code::Blocks
6 Building CodeBlocks from sources
This chapter describes how to build Code::Blocks itself.
Note:
This chapter existed in the version 1 original .tex files but was not
published in all languages. It needs to be reviewed and completed at
least for Linux users.
6.1 Introduction
This section will describe the process used in creating the nightly builds, and can be used
as a guideline if you want to build Code::Blocks yourself. It is described as a sequence of
actions.
In order to perform our build tasks, we will need several tools. Let’s create an ingredient
list for our cooking experiments
a compiler
an initial build system
the Code::Blocks sources
zip program
svn (version control system)
wxWidgets
Since the Code::Blocks developers build Code::Blocks using GCC, we might as well use
that one under windows. The easiest and cleanest port is MinGW. This is the compiler
distributed with Code::Blocks when you download the FULL official package. With C::B
17.12 it was a version TDM 5.1.0 which was distributed, a rather old one. With C::B
20.03 we still used version 8.1.0, which works nicely and which was distributed with this
Code::Blocks release, but you can find more recent ones (as shown in MinGW Compiler
Toolchains (subsection 5.2.2 on page 150). You can obtain two MinGW versions : for
generating 32 bits code, or for 64 bits code on mingw64. Many sub-choices are available.
For 32 bits, I would suggest i686-posix-sjlj and for 64 bits x86 64-posix-seh [,→MinGW64].
New C::B 2025 versions are now bundled with gcc 14 (see [Link]
6 Building CodeBlocks from sources Code::Blocks V2.1.20
Note:
The 64 bits version can produce 64 bits code and 32 bits code. Simply
add option -m64 or -m32 to your compilation AND link options. Nor-
mally, 32 bits version produces only 32 bits code. Just take care that
if you use libraries, static or dynamic, they must have been generated
with the same bits number
set path=%PATH%;C:\MinGW32\bin;C:\MinGW32\i686-w64-mingw32\bin;
set path=%PATH%;C:\MinGW64\bin;C:\MinGW64\x86_64-w64-mingw32\bin;
160 Code::Blocks
Code::Blocks V2.1.20 6.2 Windows or Linux
You can also modify the global (or user) PATH enviroment variable.
First, download a nightly build. You can make your selection from here ([,→FORUM] in
Nightly Builds). The nightly builds are unicode versions, containing the core and con-
tributed plug-ins. Read carefully the first post of each nightly : it contains instructions
to download and install additionnal dlls, necessary with recent MinGW/gcc versions,
particularly version 14.2 used to build recent C::B nightly.
Next, unpack the 7-zip file [,→7Z] to any directory you like. If you don’t have 7-zip, you
can download it for free from here.
Now, Code::Blocks needs one more dll to work correctly: the WxWidgets dll. You can
also download it at the nightly builds forum. Just unzip it into the same directory that
you unpacked the Code::Blocks nightly build. It also needs the [Link]. It’s in the
bin directory of our MinGW installation. So, it’s important to make sure the bin directory
of your MinGW installation is in your path variable.
Finally, start up this new nightly build of Code::Blocks. It should discover the MinGW
compiler we just installed. If it’s not the case, go to the menu ”Settings / Compiler... /
Toolchain executables” and adjust the MinGW path to your specific installation.
The Code::Blocks developers provide their sources through the version control system
subversion [,→Subversion]. So, we need a client to access their svn repository of sources.
A nice, easy client for Windows is TortoiseSVN, which is freely available. Download and
install it, keeping all suggested settings [,→TortoiseSVN].
svn://[Link]/p/codeblocks/code/trunk
Now be patient while TortoiseSVN retrieves the most recent source files from the Code::Blocks
repository into our local directory. Yes; all those Code::Blocks sources are coming your
way!
Code::Blocks 161
6 Building CodeBlocks from sources Code::Blocks V2.1.20
For more info on SVN settings, see info on SVN settings (Nevertheless, this C::B plugin
does not exist anymore in recent Code::Blocks versions). If you don’t like an Explorer
integration or look for a cross-plattform client you might want to have a look at RapidSVN.
6.2.3 wxWidgets
WxWidgets is a platform abstraction that provides an API to support many things such
as GUI, sockets, files, registry functionality [,→Wxwidgets]. By using this API, you can
create a platform independent program.
Code::Blocks is a wxWidgets (here after: wx) application, that means if you want to run
Code::Blocks you needed the wx functionality. This can be provided in a couple of ways.
It could be a .dll or a static library. Code::Blocks uses wx as a dll and this dll can also
be downloaded from the nightly build section of the forum.
However, if we want to build a wx application, we need to include the headers of the wx
sources. They tell the compiler about the functionality of wx. In addition to those header
files, our application needs to link to the wx import libraries. Well, let’s take it step by
step.
Wx is provided as a zip file of it’s sources, so we need to build that ourselves. We already
shopped for the MinGW compiler, so we have all the tools we need at hand.
Next, let’s unzip the wx sources into C:\Projects so we will end up with a wx root
directory like this:
C:\Projects\wxWidgets-3.2.6. Next unzip the patch into the same directory letting it
overwrite files. Note that we are going to refer to the wx root directory from now on as
<wxDir>
Note:
User PBfordev has created a very nice guide to compile, install and
use wxWidgets on Windows. You can find it as a pdf file on his git
repos: [Link] [,→wxPBguide]. His point of view is a little bit
different, as he creates a wxWidgets multilib version. For Code::Blocks
itself on Windows, following different advices on the C::B forum, it’s
better to have a monolitic version. This is how the official and nightlies
versions are distributed.
cd <wxDir>\build\msw
162 Code::Blocks
Code::Blocks V2.1.20 6.2 Windows or Linux
We are now in the right place. We are first going to clean up the source:
If you are using TDM-gcc 5.1.0, or gcc 8.1.0, you will have to add the following options
on the same command line:
USE_XRC=1
CXXFLAGS+="-fpermissive -fno-keep-inline-dllexport -std=gnu++11
-Wno-deprecated-declarations"
LDFLAGS="-Wl,--allow-multiple-definition"
If you are using more recent compilers as gcc 12.1.0 or gcc 14.2, you can use this build
command:
because some parameters are now set by default in last wxWidgets builds or are not
necessary anymore.
The parameter -j 4 allows a parallel build on 4 processors and thus strongly accelerates
the build process. The value 4 has to be adjusted to your processor configuration. The
best result is when the value is equal to the number of processors (4 in my case).
Code::Blocks for Windows, since SVN rev 11701, is generated to support DIRECT2D
activated/forced (for faster and better quality graphics). wxWidgets generation needs
some adjustments to be done directly in setup.h file(s). Normally the only file which
needs to be modified is in the lib subdirectory, the one created the first time wxWidgets
is generated, and used in following generations. For a gcc, dll build, it’s something like:
C:\wxWidgets-3.2.6\lib\gcc dll\mswu\wx.
You can simply modify the line containing (line 1651 in wxWidgets 3.2.6):
#define wxUSE_GRAPHICS_DIRECT2D 0
by
#define wxUSE_GRAPHICS_DIRECT2D 1
Code::Blocks 163
6 Building CodeBlocks from sources Code::Blocks V2.1.20
USE_OPENGL=1
DEBUG_FLAG=0
Note:
USE OPENGL=1 creates an additional dll, used if your wxWidgets
program requires an OpenGL windows, particularly when wxGLCan-
vas is used
VENDOR=cb
VENDOR=cb_64
Note:
If VENDOR is not specified, it’s equivalent to VENDOR=custom.
VENDOR=cb is used by Code::Blocks team. So, to avoid confusion,
it may be advisable to use an other ”vendor” identifier.
Compile with
mingw32-make -f [Link] SHARED=1 MONOLITHIC=1 BUILD=debug UNICODE=1
strip ..\..\lib\gcc_dll\wxmsw32u_gcc_cb_64.dll
strip ..\..\lib\gcc_dll\wxmsw32u_gl_gcc_cb_64.dll
164 Code::Blocks
Code::Blocks V2.1.20 6.2 Windows or Linux
6.2.4 Zip
During the build of Code::Blocks, several resources are going to be zipped in zip files.
Therefore, the build process should have access to a [Link]. We have to download that
[Link] (if it’s not already in your MinGW distribution) and put it somewhere in our path.
A good place is: MingW\bin.
You can download [Link] for free from this site ([Link]
[Link]), or from here ([Link] which is a
direct ftp link to the directory containing the most recent versions.
Once downloaded, simply extract [Link] to the appropriate location.
6.2.5 Workspace
This brings us to the last preliminary task. The Code::Blocks code can be divided into
2 major parts: the core with internal plug-ins, and the contributed plug-ins. You always
need to build the core/internal parts before building the contrib part.
To build the internal part, you can use the Code::Blocks project file which you can find at:
<cbDir>\src\[Link]. Our Code::Blocks master directory is from now one men-
tioned as <cbDir>, by the way. A workspace is something that groups several projects to-
gether. To build the contrib plug-ins, they can be found at <cbDir>\src\[Link].
But, let’s create a workspace containing everything. Let’s put that workspace in the
master directory <cbDir>. Just use a regular text editor and create a file with the name
”[Link]” for example. Such a file already exists in recent C::B versions.
You can give it the following content (here to generate a 64 bit version with wxWidgets
3.2) :
Code::Blocks 165
6 Building CodeBlocks from sources Code::Blocks V2.1.20
<Project filename="plugins/loghacker/loghacker_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/ModPoller/ModPoller_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/tidycmt/tidycmt_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/AutoVersioning/AutoVersioning_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/BrowseTracker/BrowseTracker_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/byogames/byogames_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/cb_koders/cb_koders_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/Cccc/Cccc_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/codesnippets/codesnippets_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/codestat/codestat_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/copystrings/copystrings_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/CppCheck/CppCheck_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/Cscope/Cscope_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/devpak_plugin/DevPakPlugin_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/DoxyBlocks/DoxyBlocks_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/dragscroll/DragScroll_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/EditorConfig/EditorConfig_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/EditorTweaks/EditorTweaks_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/envvars/envvars_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
166 Code::Blocks
Code::Blocks V2.1.20 6.2 Windows or Linux
</Project>
<Project filename="plugins/contrib/FileManager/FileManager_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/FortranProject/FortranProject_cbsvn_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/headerfixup/headerfixup_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/help_plugin/help-plugin_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/HexEditor/HexEditor_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/IncrementalSearch/IncrementalSearch_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/keybinder/keybinder_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/lib_finder/lib_finder_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
<Depends filename="plugins/contrib/wxContribItems/wxContribItems_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/MouseSap/MouseSap_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/NassiShneiderman/NassiShneiderman_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/profiler/cbprofiler_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/ProjectOptionsManipulator/ProjectOptionsManipulator_wx32_64.cbp"
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/regex_testbed/RegExTestbed_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/ReopenEditor/ReopenEditor_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/rndgen/rndgen_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/clangd_client/clangd_client_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/SmartIndent/SmartIndent_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/source_exporter/Exporter_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
Code::Blocks 167
6 Building CodeBlocks from sources Code::Blocks V2.1.20
<Project filename="plugins/contrib/SpellChecker/SpellChecker_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/symtab/symtab_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/ThreadSearch/ThreadSearch_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
<Depends filename="plugins/contrib/wxContribItems/wxContribItems_wx32_64.cbp" />
</Project>
<Project filename="plugins/contrib/ToolsPlus/ToolsPlus_wx32_64.cbp">
<Depends filename="CodeBlocks_wx32_64.cbp" />
</Project>
</Workspace>
</CodeBlocks_workspace_file>
Note:
Several variants of this file exists, depending on the OS, wxWidgets
version, 32 or 64 bits build.
[Link] Windows
Finally we have arrived at the final step; our final goal. Run the Code::Blocks executable
from your nightly build download. Choose Open from the File menu and browse for our
above created workspace, and open it up. Be a little patient while Code::Blocks is parsing
everything, and Code::Blocks will ask us for 3 or 4 global variables, these global variables
will tell the nightly Code::Blocks where it can find wxWidgets (remember : header files
and import libraries) and where it can find ... Code::Blocks sources, this is needed for
the contrib plug-ins, they need to know (as for any user created plug-in) where the sdk
(Code::Blocks header files) are. These are the values in our case :
wx <wxDir> base directory of wxWidgets.: the variable name may be wx32, wx32 64, ...
cb <cbDir>/src Code::Blocks directory contaning the sources.
cb release type : -O (for a release version, usual case. For developpers you can put -g to
debug C::B)
boost : main directory where boost is installed (ex: C:\boost). Used by the NassiShnei-
derman plugin, fill with the same value the subsections include and lib
Now go to the Project Menu and choose (re)build workspace, and off you go. Watch how
Code::Blocks is building Code::Blocks.
After the creation of Code::Blocks, the generated files with the debug information can
be found in the devel subdirectory. By calling, or executing in a console, the batch file
168 Code::Blocks
Code::Blocks V2.1.20 6.2 Windows or Linux
[Link] from the source directory <cbDir>/src (or more specifically the version
adapted to your specific generation, as for example update32 [Link]), the files are copied
to the <cbDir>/src/output subdirectory (or the adapted version). In addition, it will
strip out all debugging symbols. This step is very important - never ever forget it.
Now you can copy the wx dll in both that output and, optionally, the devel directory.
Then you can close Code::Blocks. That was the downloaded nightly remember?
Time to test it. In the output directory, start up the [Link]. If everything went
well, you’ll have your very own home-built Code::Blocks running.
[Link] Linux
(Note: this section should be reviewed and completed. Does not seem to be
totally updated)
linux Starting update [Link]
With this function the SVN revision of the Nightly Builts is updated in the sources. The
file can be found in the main directory of the Code::Blocks sources.
When generating under Linux, the following steps are necessary. In this example we
assume that you are in the Code::Blocks source directory. Under Linux, the environment
variable PKG_CONFIG_PATH must be set. The <prefix> directory has to contain the
[Link] file.
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<prefix>
sh update_revsion.sh
./bootstrap
./configure --with-contrib=[all | plugin names separated with comma]
--prefix=<install-dir>
make
make install (as root)
You can also build under Linux as under Windows, with a workspace file. Nevertheless,
pkg config and wx-config must be set correctly.
[Link] Windows
Code::Blocks 169
6 Building CodeBlocks from sources Code::Blocks V2.1.20
<cbDir>/codeblocks/src
Variable wx
For the wx variable, set the base entry to the source directory of wx: e.g.
C:\wxWidgets-2.8.12
C:\wxWidgets-3.2.6
In the Code::Blocks project, the project variable WX_SUFFIX is set to u. This means that,
when generating Code::Blocks linking will be carried out against the *u gcc [Link]
library (by default). The official nightly Builts of Code::Blocks will be linked against
gcc [Link]. In doing so, the layout is as follows.
gcc_<VENDOR>.dll
The <VENDOR> variable is set in the configuration file [Link] or in the make
command line as shown before. To ensure, that a distinction is possible between the
officially generated Code::Blocks and those generated by yourself, the default setting
VENDOR=custom should never be changed.
Afterwards create the workspace [Link] via ’Project’ →’Build workspace’
. Then execute [Link] once more.
[Link] Linux
170 Code::Blocks
A URL catalog
[,→7Z] 7z zip homepage.
[Link]
172 Code::Blocks