General Target Options

This is where you can configure most general aspects of your target.

Here is what you will see when you switch to the target section in the project settings of the calculator example:

General target properties

You can change the name of the target and give it a description. A target can be marked as abstract if it should not appear in the list of targets when opening a configuration.

Targets can inherit from each other, which means they take certain settings from a base target if they don't specify it themselves. Inherited values are displayed with a light grey, overridden values with a light red background. Overridden values can be reset to their inherited value, by right clicking on them and choosing Use inherited value from the context menu.

An important setting that affects other settings is the compilation type. Here you can specify if you want to generate normal C/byte code (classic application) or if you want to generate .NET code.

With the output name option you can change the name of the generated executable if you want this to be different than the name of the system.

If you want to change the root of your system, you will see a dialog like this:

Root dialog

You can specify a root class, root cluster and root feature. Both root cluster and root feature are optional. Instead of specifying a root class it is also possible to choose Compile all classes which doesn't generate a binary but checks all classes in the target. This can be used for making sure that a library doesn't have any compiler errors.

The version dialog looks similar to this one:

Version dialog

It allows a version number and some copyright information to be set. On .NET this information will be put into the generated assembly.

The Exclude Rules setting allows to define rules to exclude certain files from every cluster. This can be used to exclude CVS or SVN directories globally instead of excluding them on each cluster. The dialog looks like this:

Exclude Rules dialog

Exclude rules are regular expressions which are matched against directories and file names. The basic semantics are that everything is included that either does not match an exclude pattern or does match an include pattern. Matching is done against the path relative to the location of the cluster and / is used as a directory separator.

Sample: We have a recursive cluster in c:\projects\calculator\cluster and in there we have a file c:\projects\calculator\cluster\interface\ignore_me.e
Matching would now be first done against /interface and then against /interface/ignore_me.e
A rule like ^/interface$ would exclude the whole subdirectory, a rule like ^/interface/ignore_me\.e$ would only exclude the ignore_me.e class.

It is also possible to add conditions to a file rule (set of include and exclude file patterns). Adding conditions allows a file rule to be active only under certain conditions. The condition dialog looks like this:

Condition dialog

Conditioning possibilities are platform (e.g. only Windows or everything but windows), kind of build, .NET generation, dynamic runtime, multithreaded, version of compiler and version of msil clr. It is also possible to specify custom conditions where a user defined variable has to have a certain value.

Further options are

  • Profiling: turn on the Eiffel profiler during the application execution (C code generation mode only). The results can be seen at the end of the execution in the profiler window.
  • Trace: display on the console all the features that are called during the system execution (C generation mode only).
  • .NET Namespace: specify the namespace for this target (.NET code generation mode only)
  • Line generation: generate some extra information that will enable a .NET debugger or a C debugger to step through the Eiffel code rather than MSIL code or C code.
  • Full Class Checking, Void-safety, Are types attached by default?: These settings are generally associated with increasing the safety of compiled code, particularly void-safety.
  • Cat call detection: Attempts to identify at compile time the possibility of the system making a catcall.
  • Syntax: Allows you to select the syntax variant used by the compiler when compiling this target.
  • Concurrency: Controls the level of concurrency support for this target. No concurrency means mono-threaded; EiffelThread means concurrent threads using the EiffelThread library. SCOOP means concurrency based on the SCOOP rules.