/reference (Use named module IFC)

Tells the compiler to use an existing IFC (.ifc) for the current compilation.

Syntax

/reference module-name=filename
/reference filename

Arguments

filename
The name of a file that contains IFC data, which is prebuilt module information. To import more than one module, include a separate /reference option for each file.

module-name
A valid name of an exported primary module interface unit name or full module partition name.

Remarks

In most cases, you won't need to specify this switch because the project system discovers module dependencies within a solution automatically.

The /reference compiler option requires you enable the /std:c++20 or later compiler option (such as /std:c++latest). The /reference option is available starting in Visual Studio 2019 version 16.10.

If the /reference argument is a filename without a module-name, the file gets opened at runtime to verify the filename argument names a specific import. It can result in slower runtime performance in scenarios that have many /reference arguments.

The module-name must be a valid primary module interface unit name or full module partition name. Examples of primary module interface names include:

  • M
  • M.N.O
  • MyModule
  • my_module

Examples of full module partition names include:

  • M:P
  • M.N.O:P.Q
  • MyModule:Algorithms
  • my_module:algorithms

If a module reference is created using a module-name, other modules on the command line don't get searched if the compiler encounters an import of that name. For example, given this command line:

cl ... /std:c++latest /reference m.ifc /reference m=n.ifc

In the case above, if the compiler sees import m; then m.ifc doesn't get searched.

Examples

Given three modules as listed in this table:

Module IFC file
M m.ifc
M:Part1 m-part1.ifc
Core.Networking Networking.ifc

The reference options using a filename argument would be like this:

cl ... /std:c++latest /reference m.ifc /reference m-part.ifc /reference Networking.ifc

The reference options using module-name=filename would be like this:

cl ... /std:c++latest /reference m=m.ifc /reference M:Part1=m-part.ifc /reference Core.Networking=Networking.ifc

See also

/scanDependencies (List module dependencies in standard form)
/sourceDependencies:directives (List module and header unit dependencies)
/headerUnit (Use header unit IFC)
/exportHeader (Create header units)