Compile page, Project Designer (traditional Synergy)

Use the Compile page of the Visual Studio Project Designer to specify compile settings for a traditional Synergy project.

To access this page, select a project node in Solution Explorer, and then select Project > Properties. In Project Designer, select the Compile tab.

Compiler command line

This non-editable area of the page displays traditional Synergy compiler options that correspond to settings selected on this page.

Compiler settings

Set the warning level (‑W)

Select this option and select one of the following to control warnings:

0 Don't generate any warning messages.
1 Display severe warnings.
2 Display level 1 warnings plus certain less severe warnings, such as warnings about hiding class members.
3 Display level 2 warnings plus certain less severe warnings, such as warnings about expressions that always evaluate to true or false.
4 Display all level 3 warnings plus informational warnings.

Compiler warning levels are specified on the page for each individual error.

Disable specified warnings (‑WD)

To disable warnings, select this option and specify the error numbers for warnings you want to disable. To specify multiple error numbers, separate numbers with commas.

Convert specified warnings to errors (‑WE)

To have the compiler report some warnings as errors, select this option and specify the error numbers for the warnings in this field. To specify multiple warnings, separate numbers with commas. Note that warnings specified in the Disable specified warnings field will not be reported as errors or warnings.

Enable .NET compiler warnings (‑qnet)

If checked, specifies that .NET compiler warnings are turned on for items that are not supported for Synergy .NET. These include deprecated data types, syntax, APIs, compiler options, and alignment warnings. Warnings are output to standard error.

Generate errors for all compiler warnings (‑qerrwarn)

Select this to change compiler warnings into errors.

Set compile-time defines (‑qdefine)

To define one or more identifiers and assign a replacement value to each, use the following syntax in this field:


Replacement can be a number or a quoted string. And you can specify multiple identifier=replacement pairs by separating them with commas:


Quotation marks that are to be part of replacement must be escaped by prefixing them with the backslash character. For example:


Note that this is similar to using .DEFINE in code, but settings here apply to the entire compilation unit (not just a routine).

Relax strong prototyping validation (‑qrelaxed)

If checked, specifies that strong prototype validation is relaxed: alphanumerics are allowed in unary plus operations, sizes larger than the maximum are allowed on decimal and implied-decimal fields, and EXITE can exist without a RETURN. You can control which additional compiler checks are relaxed with one or more of these options:

Default behavior for COMMON statements (‑qexternal or ‑qglobal)

Use this to determine how COMMON statements that are not set to GLOBAL or EXTERNAL will be treated. Select Global to treat them as global commons. Select External to treat them as external commons.

Default behavior of unqualified record statements (‑qstack, ‑qstatic, or ‑qlocal)

Use this to set the default for unqualified RECORD statements (i.e., RECORD statements that don't specify STACK, STATIC, LOCAL, CONST, or READONLY). See RECORD‑ENDRECORD for more information.

Stack Makes the contents of a record unique for each activation of the routine.
Static Makes the contents of a record persist throughout the life of the program.
Local Makes the contents of a record persist throughout the life of the program.

Define alternate compile-time ^VARIANT (‑v, ‑qvariant)

To define the ^VARIANT data reference operation, select this option and enter a value in the field. The default value is 0.

Align data on native system boundaries (‑qalign)

Select this to align integer types and alpha types greater than 64 bytes to a native int boundary in unnamed records. In addition, all other records and global commons will be aligned to a native int boundary. This option is selected automatically if the Enable .NET compiler warnings (‑qnet) option is selected.

Concatenate source files (‑qconcat)

Select this to concatenate source files when compiling. Note that unresolved path problems due to imports may occur.

Convert all decimal type arguments to numeric (‑N, ‑qdecargs)

Select this to convert all decimal type arguments to numeric.

Define all routines as re-entrant (‑E, ‑qreentrant)

If checked, specifies that all routines in the files being compiled can be re-entered. (You can also specify the REENTRANT modifier on the FUNCTION and SUBROUTINE statements for those routines.)

Define all undefined functions as ^VAL (‑X, ‑qimplicit_functions)

If checked, specifies that undefined external functions should automatically be defined as ^VAL functions.

Enable bounds checking (‑qcheck for debug, ‑qstrict for release)

If checked, specifies that bounds checking is enabled:

This option is selected automatically if the Enable .NET compiler warnings (‑qnet) option is selected.

Refresh data from the disk between invocations of each routine (‑r, ‑qrefresh)

Refresh data from the disk between invocations of each routine.

Require prototype usage (‑qreqproto)

By default the compiler does not check parameters for calls to unprototyped subroutines or calls to functions defined as EXTERNAL from other compilation units. Additionally, it treats non-EXTERNAL functions in other compilation units as ^VAL functions if the Define all undefined functions as ^VAL (‑X, ‑qimplicit_functions) option is selected. However, if Require prototype usage (‑qreqproto) is selected, the compiler validates all routines against prototypes (except routines call by XSUBR), and "Not found" errors are generated for routines that are not prototyped. It also causes the compiler to ignore all EXTERNAL function designations and the Define all undefined functions as ^VAL (‑X, ‑qimplicit_functions) option. Prototyping enables the compiler to perform full parameter checking, and it enables IntelliSense to display parameter information correctly.

Note that with this option

Set FIND statements to lock found records by default (‑F)

Select this to have FIND statements default to locking found records. If this option is not specified, Synergy DBL does not lock the record unless the LOCK qualifier is specified.

Trim trailing null arguments (‑T)

If checked, specifies that trailing null arguments should be removed from a subroutine or function call.

Use alternate form of IF (‑a, ‑qualtif)

Select this option to use the alternate, non-ANS DIBOL form of the IF statement, which specifies that the THEN is optional and the ELSE belongs to the last IF statement. (The ANS DIBOL form of the IF statement specifies that each ELSE belongs to the most recent THEN in the same lexical level.) For more information, see IF‑THEN‑ELSE.

Compile source files into separate object files (may be less performant)

If checked, each source file in the project is compiled into a separate DBO when the project is built. (If this is not selected, all source files are compiled into a single DBO.) Selecting this option can improve performance when the project is rebuilt for minor changes, but it can result in longer build times when the entire project must be rebuilt.

Other options

Enter additional compiler options you want set. See Traditional Synergy compiler options for information on options you can specify in this field. If you specify more than one option in this field, separate options with a space, as you would on the command line.