It's safer to use EiffelStudio to edit project settings than to edit ECF by hand.
The notion of capabilities was introduced in EiffelStudio 17.01:
The idea is that a library or a project can support different compilation settings, but particular values of the settings should be specified when compiling the library/project. So, in the ECF format
If “support” is not specified, an inherited or a default capability is used. If “use” is not specified, an inherited value is used, or the value defaults to the value of “support”.
A project that uses a library cannot specify “support” value that is not compatible with the corresponding library value. For example, a library compiled with “Transitional” void safety cannot be used in a project with “Complete” void safety. Either the library should be updated to “Complete” void safety or the project should be compiled with “Transitional” void safety.
Similarly, a project that supports “Transitional” void safety (“support”) cannot be compiled with “Complete” void safety (“use”). Either the supported capability should be set to “Complete” void safety, or the project should be compiled with “Transitional” void safety.
(Alexander Kogtenkov)
Here is an example of an ECF file for Eiffel 18.07:
</code> <?xml version=“1.0” encoding=“ISO-8859-1”?> <system xmlns=“http://www.eiffel.com/developers/xml/configuration-1-18-0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://www.eiffel.com/developers/xml/configuration-1-18-0 http://www.eiffel.com/developers/xml/configuration-1-18-0.xsd” name=“project” uuid=“FB44F480-6B75-42DC-B8F2-2738F8C3799E”>
<target name="project"> <root class="ROOT" feature="make"/> <file_rule> <exclude>/CVS$</exclude> <exclude>/EIFGENs$</exclude> <exclude>/\.git$</exclude> <exclude>/\.svn$</exclude> </file_rule> <option warning="true" manifest_array_type="mismatch_warning"> <assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/> </option> <setting name="console_application" value="true"/> <capability> <concurrency support="scoop" use="scoop"/> <void_safety support="all" use="all"/> </capability> <precompile name="base_pre" location="$ISE_PRECOMP\base-scoop-safe.ecf"/> <library name="base" location="$ISE_LIBRARY\library\base\base.ecf"> <renaming old_name="SET" new_name="EIFFEL_SET"/> <renaming old_name="BAG" new_name="EIFFEL_BAG"/> </library> <library name="espec" location="$ISE_LIBRARY\contrib\library\testing\framework\espec\library\espec.ecf"/> <library name="mathmodels" location="$MATHMODELS\library\mathmodels.ecf"/> <cluster name="root" location=".\root\" recursive="true"/> <cluster name="model" location=".\model\" recursive="true"/> <cluster name="tests" location=".\tests\" recursive="true"/> </target>
</system> </code>