mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-07 15:22:31 +01:00
create 19.12 branch
git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2229 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
[[Property:modification_date|Mon, 10 Sep 2018 10:49:19 GMT]]
|
||||
[[Property:publication_date|Mon, 10 Sep 2018 10:32:05 GMT]]
|
||||
[[Property:uuid|81E6A18A-C7D8-4F80-8D08-8B2C0B6350C8]]
|
||||
[[Property:weight|0]]
|
||||
[[Property:title|Language and Capabilities]]
|
||||
The sections '''Language''' and '''Capability''' list closely-related options that work together. The values in the section '''Language''' specify what rules or semantics the compiler should apply when compiling and running code. If not specified, the value of the corresponding option from the section '''Capability''' is used. A selected value in the section '''Language''' should be compatible with the value in the section '''Capability'''. In other words, the values listed in '''Capability''' tell what source code is capable of, whereas the values in '''Language''' tell what is used when compiling for a specific target.
|
||||
|
||||
The values in the section '''Language''' are used only when the corresponding target is compiled as a root one. Otherwise, they are ignored. The values in the section '''Capability''' are used to verify that current project settings allow for using a particular library (or classes of the project itself). For example, the [https://www.eiffel.org/doc/uuid/a03568e8-eb79-70d7-04a3-6fd3ed7ac2b3 void-safe] library ''[https://www.eiffel.org/doc/uuid/0153c1de-bf88-fa0d-52a5-e50ffcc4e8c8 Base]'' can be used in a non-void-safe project, because project settings are compatible with capabilities of the library. On the other hand, the library ''[https://www.eiffel.org/doc/uuid/AAF0CEF9-7268-492F-9119-872164995898 Thread]'' cannot be used in a [https://www.eiffel.org/doc/uuid/5FE312E0-0AC6-465C-AD3B-D5D73AAE566F SCOOP] project, because the library is not SCOOP-capable.
|
||||
|
||||
Capabilities are supported for the following settings, listed together with compatibility order, where ''X < Y'' means ''X'' is compatible with ''Y'':
|
||||
|
||||
# CAT-call detection: None < Transitional < Complete.
|
||||
# Concurrency: Thread < None < SCOOP.
|
||||
# Void safety: None < Conformance < Initialization < Transitional < Complete.
|
||||
|
||||
In addition to the restriction on the compilation setting specified in the section '''Language''', a project or a library with a higher level of capabilities cannot rely on a library with a lower level.
|
||||
@@ -0,0 +1,11 @@
|
||||
[[Property:title|Debug Options]]
|
||||
[[Property:weight|6]]
|
||||
[[Property:uuid|ea9cc7c3-0bdb-5ef8-e4a6-c66d5f3dd951]]
|
||||
[[Image:debug-options|Debug dialog]]
|
||||
* Enabled: globally enabled/disable debugs.
|
||||
* Unnamed Debugs: debug clauses without a name
|
||||
* Named Debugs: if the system is compiled, an entry for each name in a debug appears and can be enabled/disabled.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
[[Property:title|Externals Options]]
|
||||
[[Property:weight|7]]
|
||||
[[Property:uuid|0e46ef16-4946-8bc7-6481-0d069cbb506b]]
|
||||
[[Image:external-options|Externals dialog]]
|
||||
|
||||
In most cases this is not needed but for some C/C++ externals and in some .NET projects it is necessary to specify additional includes, objects or resources.
|
||||
|
||||
If you use a library, externals of this library are automatically included. E.g. if you use vision2 the externals for vision2 don't need to be added to the project itself.
|
||||
* Include: This is where you can enter the location of the directories where the C/C++ compiler will look for the header files that are required. The header files which the C/C++ compiler will look for are the ones that appear in an encapsulation of a C/C++ external in an Eiffel class. See the pages on "[[With other languages|interacting with other languages]]" to learn more about specifying C/C++ externals.
|
||||
* Object: additional C/C++ object files
|
||||
* Library: like object files, but will be added last, needed for some very strict C compilers
|
||||
* Makefile: additional makefiles, if possible use tasks instead
|
||||
|
||||
Resource: .NET resources
|
||||
* The .resx resource file format is a XML based format to include objects (such as images and other binary formats) and strings.
|
||||
* The .txt resource file format can only contains strings.
|
||||
|
||||
Externals have three properties:
|
||||
* Location: location of the external, will be copied verbatim into the makefile
|
||||
* Description: an optional description about the external
|
||||
* Condition: allows the same configuration with externals to work in different situations (e.g. windows and unix) (see [[General Target Options|conditions]] )
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
[[Property:title|Advanced Options]]
|
||||
[[Property:weight|4]]
|
||||
[[Property:uuid|be1dc034-2bca-3d3a-5dfc-8597b2cc7051]]
|
||||
[[Image:advanced-options|Advanced dialog]]
|
||||
* Address Expression: lets you pass `$(s.to_c)` to a feature instead of declaring `a` of type <code>ANY</code>, and then assigning `s.to_c` to `a` and passing `$a`.
|
||||
{{Caution|Turn this option on only if you have advanced knowledge of the garbage collector internals, because using this syntax in some situations could lead to bugs that are very hard to trace. }}
|
||||
* Automatic Backup: generate a backup of the class and configuration files during recompilation?
|
||||
* Check VAPE: Enforce <code> VAPE </code> validity constraint: lets you disable type checking for <code> VAPE </code> errors in preconditions, which correspond to insufficiently exported features used in preconditions (ETL 2nd edition page 122).
|
||||
* Check for Void target: Should "Feature call on Void target" exceptions be raised?
|
||||
* Console Application: has no effect on Unix systems. It lets Windows users choose between creating a console application or a GUI application (in which case a console will be created if needed, instead of using the console the program was launched from).
|
||||
* Dead Code Removal: should unused code be removed? (C code generation mode only)
|
||||
* Dynamic Runtime: makes the generated executable use a shared library version of the runtime on both Windows (DLL) and Unix platforms (.so) that supports shared libraries.(C code generation mode only)
|
||||
|
||||
{{note|On Windows, the dynamic run-time is available only if you compile with the Microsoft Visual compiler. }}
|
||||
* Enforce unique class names: enforce all class names to be system wide unique?
|
||||
* Exception Trace: makes it possible to see a complete exception trace in a finalized application. Because it is adding some code to remember where the application was during the crash it can slow down the performance of your application by a factor of 5% to 30% depending of your platform. (C code generation mode only)
|
||||
* Inlining, Inlining Size: enables inlining on Eiffel features that can be inlined, i.e. whose size is less or equal to the specified size in the combo box. The size value given in parameter corresponds to the number of instructions as seen by the Eiffel compiler (for example a := b.f corresponds to 2 instructions). The inlining is very powerful since it can inline a function in all your Eiffel code, without scope limitation as found in C or C++ compilers. (C code generation mode only)
|
||||
* Platform: override platform value used for checking conditions, useful for cross compilation
|
||||
* Shared Library Definition: lets you specify a `file_name.def' as the file where the Eiffel compiler will look when it tries to generate the exported functions of the shared library you are developing (C code generation mode only). To have more information concerning definition files, see the [[Dynamic library generation]] .
|
||||
* Total Order on REALs: Allow a total order on REAL data types? Allows NaN (Not a Number) equal NaN, and NaN to be the smallest number of all.
|
||||
* Library Root: Absolute path to use as base for relative paths. If this is not defined, the path to the configuration file will be used.
|
||||
|
||||
==.NET Options==
|
||||
* Use Optimized Precompile: use an optimized version of a precompile
|
||||
* Use Cluster Name as Namespace: See [[Advanced Options|Class and feature naming]]
|
||||
* Use Recursive Cluster Name as Namespace: See [[Advanced Options|Class and feature naming]]
|
||||
* .NET Naming Convention: See [[Advanced Options|Class and feature naming]]
|
||||
* IL Verifiable: in the .NET world, verifiability is important. This is the only way to ensure that an application is not going to crash or to crash your system by accessing not authorized memory locations. Due to some semantic differences between Eiffel and.NET, our code generation is not always verifiable for performance reasons. If you want your code to be verifiable, you need to select this option. The compiler will then generate a code that will be slightly slower.
|
||||
* CLS Compliant: mark generated assemblies as CLS compliant
|
||||
|
||||
* Metadata Cache Path: Location where information about external assemblies is stored.
|
||||
* Classes per Module: Number of classes generated per .NET module during incremental compilation. Increasing this value will slow down the incremental recompilation, but speed up the time to load the assembly while debugging in workbench mode.
|
||||
* .NET Runtime Version: .NET version to use
|
||||
* Generation Type: generate an exe or a dll (exe is default)
|
||||
* Signing Key: specify a cryptographic key for your application so that the compiled assembly can be added to the Global Assembly Cache (GAC). If a non existing filename is chosen, a key will be automatically generated.
|
||||
* Force 32bit: on a 64bit machine, forces compilation for 32 bit.
|
||||
<span id="dotnet_naming"></span>
|
||||
===Class and feature naming===
|
||||
|
||||
|
||||
The standard naming conventions for .NET and Eiffel are different. To accommodate this difference Eiffel Studio provides a number of options to the developer, allowing for consistent naming of classes and features within and between .NET systems. To illustrate this we shall consider a system using the EiffelBase library and focus on the CURSOR class. The base cluster is included in the project settings Cluster tab as shown below, where $ISE_EIFFEL is the environment variable pointing to the location of Eiffel on your hard disk.
|
||||
|
||||
|
||||
The CURSOR class is located at '$ISE_EIFFEL\library\base\structures\cursors'.
|
||||
|
||||
|
||||
* Follow .NET naming guidelines: this option determines whether the generated .NET code uses the Eiffel or .NET naming convention. Using Ildasm, the IL disassembler tool provided with the .NET Framework, we can see the difference between them. The Eiffel naming convention uses uppercase characters for all classes whereas the .NET nomenclature uses the Camel Case style. Note that this option is only available in a non-compiled system. Once the system has been compiled the naming standard is fixed for the project.
|
||||
|
||||
No .NET naming guidelines
|
||||
|
||||
[[Image:ildasm-no-dotnet-naming]]
|
||||
|
||||
.NET naming guidelines
|
||||
|
||||
[[Image:ildasm-dotnet-naming]]
|
||||
|
||||
|
||||
* Use cluster names and Use recursive cluster names: These options dictate how a class is known to the system. In our CURSOR example there are 4 main scenarios. For a quick overview of all scenarios refer to the table at the bottom of the page. If neither box is selected we just have 'CURSOR' or 'Cursor' (depending on whether the .NET naming guidelines are used), as seen above. If 'Use cluster names' is checked then the cluster name is pre-pended to the class name, so 'CURSOR' now becomes 'base.CURSOR'.
|
||||
|
||||
[[Image:use-cluster-names]]
|
||||
|
||||
|
||||
|
||||
If 'Use recursive cluster names' is true then the full cluster name is pre-pended to the class name, so it thus becomes 'base.structures.cursors.CURSOR'.
|
||||
|
||||
|
||||
|
||||
[[Image:use-full-cluster-names]]
|
||||
|
||||
|
||||
|
||||
The final scenario is where a namespace has been defined for the cluster in the Clusters tab of the Project Settings. In this situation the namespace overrides the name of the cluster. In the example below the namespace name 'MyBaseNameSpace' is used so the resulting name is 'MyBaseNameSpace.structures.cursors.CURSOR'.
|
||||
|
||||
|
||||
|
||||
[[Image:use-namespace-name]]
|
||||
|
||||
|
||||
|
||||
===Naming Scenarios===
|
||||
|
||||
This table shows how the class name generation is affected by the naming options using the CURSOR class found in '$ISE_EIFFEL\library\base\structures\cursors' as an example.
|
||||
{|
|
||||
|-
|
||||
| Use .NET naming guidelines
|
||||
| Use cluster names
|
||||
| Use full cluster names
|
||||
| Namespace Name
|
||||
| Generated Name
|
||||
|-
|
||||
| no
|
||||
| no
|
||||
| no
|
||||
| (empty)
|
||||
| CURSOR
|
||||
|-
|
||||
| yes
|
||||
| no
|
||||
| no
|
||||
| (empty)
|
||||
| Cursor
|
||||
|-
|
||||
| no
|
||||
| yes
|
||||
| no
|
||||
| (empty)
|
||||
| base.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| yes
|
||||
| no
|
||||
| (empty)
|
||||
| Base.Cursor
|
||||
|-
|
||||
| no
|
||||
| no
|
||||
| yes
|
||||
| (empty)
|
||||
| structures.cursors.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| no
|
||||
| yes
|
||||
| (empty)
|
||||
| Structures.Cursors.Cursor
|
||||
|-
|
||||
| no
|
||||
| yes
|
||||
| yes
|
||||
| (empty)
|
||||
| base.structures.cursors.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| yes
|
||||
| yes
|
||||
| (empty)
|
||||
| Base.Structures.Cursors.Cursor
|
||||
|-
|
||||
| no
|
||||
| no
|
||||
| no
|
||||
| MyNameSpace
|
||||
| MyNameSpace.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| no
|
||||
| no
|
||||
| MyNameSpace
|
||||
| MyNameSpace.Cursor
|
||||
|-
|
||||
| no
|
||||
| yes
|
||||
| no
|
||||
| MyNameSpace
|
||||
| MyNameSpace.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| yes
|
||||
|
||||
| no
|
||||
| MyNameSpace
|
||||
| MyNameSpace.Cursor
|
||||
|-
|
||||
|
||||
| no
|
||||
| no
|
||||
| yes
|
||||
| MyNameSpace
|
||||
| MyNameSpace.structures.cursors.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| no
|
||||
| yes
|
||||
| MyNameSpace
|
||||
| MyNameSpace.structures.cursors.Cursor
|
||||
|-
|
||||
| no
|
||||
| yes
|
||||
| yes
|
||||
| MyNameSpace
|
||||
| MyNameSpace.structures.cursors.CURSOR
|
||||
|-
|
||||
| yes
|
||||
| yes
|
||||
| yes
|
||||
| MyNameSpace
|
||||
| MyNameSpace.Structures.Cursors.Cursor
|
||||
|}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
[[Property:title|Tasks Options]]
|
||||
[[Property:weight|8]]
|
||||
[[Property:uuid|48d23a04-22cc-8676-f163-31c3848e86e7]]
|
||||
[[Image:task-options|Tasks dialog]]
|
||||
|
||||
It is possible to have a command executed before/after an eiffel compilation.
|
||||
Tasks have these properties:
|
||||
* Command: command to execute
|
||||
* Description: an optional description about the external
|
||||
* Working directory: an optional working directory, if nothing is specified, the path to the configuration file will be used
|
||||
* Must succeed: does the task have to finish successful for the compilation to continue?
|
||||
* Condition: allows the same configuration with tasks to work in different situations (e.g. windows and unix) (see [[General Target Options|conditions]] )
|
||||
|
||||
==Examples==
|
||||
|
||||
===Windows===
|
||||
Execute a command and pause until user presses a key
|
||||
{{sample|cmd /c "dir && pause"}}
|
||||
|
||||
===Unix===
|
||||
Execute a command and pause for 10 seconds
|
||||
{{sample|bash -c "ls;sleep 10"}}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[[Property:title|Type mapping]]
|
||||
[[Property:weight|10]]
|
||||
[[Property:uuid|0c504ee9-fa7b-f425-0b80-53344618d995]]
|
||||
[[Image:mapping-options|Type mappings dialog]]
|
||||
|
||||
Type mappings map one class name to another. E.g. STRING can be mapped to STRING_32. So whenever STRING is used in a class, STRING_32 will be used instead.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[[Property:title|Variables]]
|
||||
[[Property:weight|9]]
|
||||
[[Property:uuid|af9e24a2-f3c6-17fd-b490-db5c93c8ccec]]
|
||||
[[Image:variable-options|Variables dialog]]
|
||||
|
||||
Variables specified here can be used in locations of groups and take precedence over environment variables. They can also be used in conditions.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
[[Property:title|Warning Options]]
|
||||
[[Property:weight|5]]
|
||||
[[Property:uuid|0fa4cc8e-a96f-1044-e2d5-2bdf7884d462]]
|
||||
[[Image:warning-options|Warning dialog]]
|
||||
* Enabled: globally enabled/disable warnings.
|
||||
* Old Syntax: warn about the use of old syntax
|
||||
* Same UUID: different configuration files with the same uuid
|
||||
* Old Verbatim Strings: warn about usage of old verbatim strings
|
||||
* Assignment on Formal/Expanded: warn about assignment attempts on formal or expanded targets
|
||||
* Options Unknown Class: class options for an unknown class
|
||||
* Onces in Generics: once features in a generic
|
||||
* Obsolete Features: features that are obsolete
|
||||
* Missing Class Export: features are exported to a class that does not exist
|
||||
* Obsolete Classes: classes that are obsolete
|
||||
* Incompatible Types Equality: incompatible types in equality comparison
|
||||
* Unused Locals: locals that are not used
|
||||
* Renaming Unknown Class: renaming was defined for a class that does not exist
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
[[Property:title|Assertion Options]]
|
||||
[[Property:weight|2]]
|
||||
[[Property:uuid|12520e45-beb4-2200-9e60-91736a3ed092]]
|
||||
'''Assertions''' allows you to configure the assertion checking levels for your project. This means that any assertion type marked '''True''' in the '''Assertions''' table will be checked at runtime. So, in the example screen shown below, only preconditions (denoted in the table by '''Require''') will be checked at runtime. All other assertion types will not be checked at runtime.
|
||||
|
||||
Each assertion setting can be configured independently of the others.
|
||||
|
||||
'''Supplier Precondition''' is a special case. When you develop new software, your software reuses libraries of existing software from other sources, such as the Eiffel Libraries. This library software is often well-established and highly reliable. Setting '''Supplier Precondition''' to '''True''' is a convenient way of setting only precondition checking on libraries, while allowing your own software to be checked to whatever degree you've determined by adjusting the other assertion level settings.
|
||||
|
||||
|
||||
[[Image:assertion-options|Condition dialog]]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
[[Property:title|Group Options]]
|
||||
[[Property:weight|3]]
|
||||
[[Property:uuid|a321f24d-3158-d123-f2f6-cf7b38172877]]
|
||||
This is where you can configure the groups of your project. A group is a container for classes and has some additional options associated. There are five types of groups
|
||||
* Cluster: represents a directory or directory structure on the disk with class files in it
|
||||
* Override cluster: similar to cluster but overrides classes in other clusters with the same name, can only appear in an application, never in a library
|
||||
* Library: a configuration of a library is included, all classes in clusters are accessible
|
||||
* Precompile: a [[Melting Ice Technology#Precompiling|precompile]] is similar to a library, but the contents of the library or libraries that make up the precompile have already been compiled and therefore the compilation of your project is faster. There can be only one precompile per project.
|
||||
* Assembly: classes in an assembly (.NET code generation mode only)
|
||||
|
||||
To add a new group, choose the corresponding add group button or context menu entry and enter a name and location or choose from a list (for assemblies and libraries).
|
||||
|
||||
[[Image:group-options|Group dialog]]
|
||||
|
||||
==Common Group Options==
|
||||
* Name: name of the group
|
||||
* Description: an optional description of the group
|
||||
* Read Only: in a read only group, classes cannot be modified
|
||||
* Location: directory for clusters, assembly file for assemblies and ecf file for libraries and precompiles
|
||||
* [[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.
|
||||
* [[Tracing|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 group (.NET code generation mode only)
|
||||
* Assertions: [[Assertion Options|assertion level]] for this group
|
||||
* Warning: [[Warning Options|warnings]] for this group
|
||||
* Debug: [[Debug Options|debugs]] for this group
|
||||
|
||||
===Advanced===
|
||||
* Condition: group nodes can be [[General Target Options|conditioned]] to only be used under certain conditions.
|
||||
* Prefix: name prefix for classes in this group (see [[#Renaming|Renaming]] )
|
||||
* Renaming: renamings for classes in this group (see [[#Renaming|Renaming]] )
|
||||
* Class Options: options specific for certain classes
|
||||
|
||||
==(Override) Cluster Options==
|
||||
Clusters can be added as a sub clusters of other clusters, just select the parent cluster before adding the cluster.
|
||||
* Recursive: should subdirectories automatically be included?.
|
||||
* Hidden: Is this a hidden cluster that can not be used if the system is used as a library?
|
||||
* Exclude Rules: [[General Target Options#file_pattern|exclude rules]] for this group
|
||||
* Dependencies: specify which groups are checked for classes if the class cannot be found in the group itself
|
||||
* Type Mapping: [[Type mapping|mapping]] of types, e.g. STRING is mapped to STRING_32
|
||||
* Visible Classes: visible classes (see [[#Visible classes|Visible classes]] )
|
||||
|
||||
==Override Cluster Options==
|
||||
* Overrides: which groups are overridden by this override (default to all).
|
||||
|
||||
==Library/Precompile Options==
|
||||
If a library is not read only, the configuration can be directly edited by clicking on the edit library button.
|
||||
* Visible Classes: visible classes (see [[#Visible classes|Visible classes]] )
|
||||
* Use Application Options: Should this library use options from the application instead of from the library?
|
||||
|
||||
==Assembly Options==
|
||||
It is possible (but not recommended) to specify an assembly only with GAC information. To do this set the location to ''none'' and specify:
|
||||
* Assembly Name: Full name of the assembly as found in the GAC.
|
||||
* Assembly Culture: Culture of the assembly.
|
||||
* Assembly Version: Version of the assembly.
|
||||
* Assembly Public Key Token: Public key token that identifies the asssembly.
|
||||
|
||||
==Resolving Conflicts==
|
||||
|
||||
There are multiple ways to resolve conflicts between different classes with the same name.
|
||||
|
||||
===Renaming===
|
||||
|
||||
A class can be renamed with a renaming or a group can have a name prefix which will get added to every class. Outside of this group, the class can then be reached by the renamed name.
|
||||
|
||||
===Dependencies===
|
||||
|
||||
It is possible to specify which other groups will be searched if a class cannot be found in the current group.
|
||||
|
||||
==Visible classes==
|
||||
|
||||
If a feature needs to be reachable from [[CECIL]], but the feature is not called from any Eiffel code, then it must be forced to be ''visible'', otherwise it will be removed by the dead code optimizer. This is done by using the ''Visible Classes'' option. In addition it is also possible, but rarely necessary, to rename a class or a feature. In most cases it suffices to make a class completely visible and renaming is unnecessary.
|
||||
|
||||
[[Image:visible-dialog|Visible dialog]]
|
||||
|
||||
To make a class visible, enter the class name and press ''Add class''. Optionally it is possible to specify a different name under which it is accessible. After a class has been added, it is possible to restrict the access to certain features only. To do this, enter the name of the feature (and optionally a renamed name), select the class it belongs to and click on ''Add feature''.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
[[Property:title|General Target Options]]
|
||||
[[Property:weight|1]]
|
||||
[[Property:uuid|a50e6063-8b23-0813-26d2-06b25f0a882e]]
|
||||
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:
|
||||
|
||||
[[Image:target-options|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:
|
||||
|
||||
[[Image:root-dialog|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:
|
||||
|
||||
[[Image:version-dialog|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.
|
||||
|
||||
<span id="file_pattern"></span>
|
||||
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:
|
||||
|
||||
[[Image:exclude-dialog|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<br/>
|
||||
Matching would now be first done against ''/interface'' and then against ''/interface/ignore_me.e''<br/>
|
||||
A rule like ''^/interface$'' would exclude the whole subdirectory, a rule like ''^/interface/ignore_me\.e$'' would only exclude the ignore_me.e class. }}
|
||||
|
||||
<span id="condition"></span>
|
||||
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:
|
||||
|
||||
[[Image:condition-dialog|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 [[variables|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.
|
||||
* [[Tracing|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 [[Creating a new void-safe project#Project settings for void-safe projects|void-safety]].
|
||||
* Cat call detection: Attempts to identify at compile time the possibility of the system making a [[ET: Inheritance#Catcalls|catcall]].
|
||||
* Syntax: Allows you to select the [[Setting the syntax variant|syntax variant]] used by the compiler when compiling this target.
|
||||
* Concurrency: Controls the level of concurrency support for this target. ''None'' means mono-threaded; ''EiffelThread'' means concurrent threads using the [[EiffelThread Tutorial|EiffelThread]] library. ''SCOOP'' means concurrency based on the [[Concurrent programming with SCOOP|SCOOP]] rules.
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
[[Property:title|EiffelStudio: Project settings window]]
|
||||
[[Property:link_title|Project Settings]]
|
||||
[[Property:weight|-10]]
|
||||
[[Property:uuid|10b907f5-bd50-09e0-af40-68988fe93df1]]
|
||||
This is where settings regarding your project are going to be made. In here you can specify:
|
||||
* the different targets your project consists of
|
||||
* the clusters that contain your classes
|
||||
* the libraries and/or assemblies that you use
|
||||
* which assertion level you want to check
|
||||
* which debug clauses will be activated
|
||||
* which warnings will be reported
|
||||
* which C/C++ externals your project needs
|
||||
* what kind of tasks should be executed before or after a compilation
|
||||
* various other options such as multithreading
|
||||
|
||||
|
||||
|
||||
The window is organized in eleven sections:
|
||||
* [[System Options|System Options]]
|
||||
* [[General Target Options|Target Options]]
|
||||
** [[Assertion Options|Assertions]]
|
||||
** [[Group Options|Groups]]
|
||||
** [[Advanced Options|Advanced Options]]
|
||||
*** [[Warning Options|Warnings]]
|
||||
*** [[Debug Options|Debug]]
|
||||
*** [[Externals Options|Externals]]
|
||||
*** [[Tasks Options|Tasks]]
|
||||
*** [[Variables|Variables]]
|
||||
*** [[Type mapping|Type Mapping]]
|
||||
|
||||
|
||||
|
||||
The changes you make are taken into account the next time you recompile your project. Instead of automatically performing the compilation each time you click Ok or Apply we decided to save the modifications and let the user decide when to recompile.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
[[Property:title|System Options]]
|
||||
[[Property:weight|0]]
|
||||
[[Property:uuid|cd9e01c6-dc0e-9ebe-a62a-a7d9d7c2d055]]
|
||||
This is where you can configure the most general aspects of your system. For example you can set the name of your application and the targets in the system.
|
||||
|
||||
Here is what you will see when opening the project settings window for the first time in a session when using the ecf file of the calculator example located at $ISE_EIFFEL|examples|base|calculator:
|
||||
|
||||
[[Image:system-options|General system properties]]
|
||||
* Name: specifies the name for the system and is also used as the default for the name of the generated executable. The name of the executable can be changed in the [[General Target Options|target settings]] .
|
||||
* Description: an optional description of the system
|
||||
* Library Target: the target that should be used if this system is used as a library
|
||||
* Library Readonly: Is this system read only per default if it is used as a library?
|
||||
* File Name: Location of the configuration file.
|
||||
* UUID: unique identifier for this system
|
||||
|
||||
A system also has one or multiple targets which are the main blocks that specify an application or library. A target can extend another target. For example in the calculator application we have three targets: common, classic and dotnet. The common target specifies the part of the application that is common to classic and .NET compilation. The dotnet and classic targets extend the common target and add their specific settings.
|
||||
|
||||
To add a new target select the system node and click on '''Add Targe'''t. If a target should extend another target, select the parent target and click '''Add Target'''.
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user