- Qt 6.7
- Qt Linguist Manual
- CMake Commands in Qt6 LinguistTools
- qt_add_lrelease
- Qt 6.7.1 Reference Documentation

# qt_add_lrelease

Add targets to transform Qt Linguist .ts files into .qm files.

The command is defined in the `LinguistTools` component of the `Qt6` package. Load the package with:

     find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

This command was introduced in Qt 6.2.

## Synopsis

Since 6.7:

     qt_add_lrelease(TS_FILES file1.ts [file2.ts ...]
                     [LRELEASE_TARGET target-name]
                     [EXCLUDE_FROM_ALL]
                     [NO_GLOBAL_TARGET]
                     [QM_FILES_OUTPUT_VARIABLE variable-name]
                     [OPTIONS ...])

Since 6.2 (deprecated):

     qt_add_lrelease(target TS_FILES file1.ts [file2.ts ...]
                     [NO_TARGET_DEPENDENCY]
                     [NO_GLOBAL_TARGET]
                     [QM_FILES_OUTPUT_VARIABLE variable-name]
                     [OPTIONS ...])

If versionless commands are disabled, use `qt6_add_lrelease()` instead. It supports the same set of arguments as this command.

Warning: Calling `qt_add_lrelease` in a directory scope different than the target directory scope requires at least CMake version 3.18.

## Description

Creates a custom command to transform `.ts` files into `.qm` files with lrelease.

The execution of the custom command is driven by a custom target that is built by default. The name of that custom target defaults to `${PROJECT_NAME}_lrelease`. Further calls of `qt_add_lrelease` will create target names with an increasing number appended. The custom target name can be specified with the `LRELEASE_TARGET` option.

The `.ts` files must be specified with the argument `TS_FILES`.

This function is designed to be used in conjunction with qt_add_lupdate. See also the convenience wrapper qt_add_translations.

## Options

You can set additional `OPTIONS` that should be passed when `lrelease` is invoked. You can find possible options in the lrelease documentation.

By default, the `.qm` files will be placed in the current build directory (`CMAKE_CURRENT_BINARY_DIR`). To change this, you can set `OUTPUT_LOCATION` as a property of the source `.ts` file.

For example, with the following code, the `.qm` files are generated in a `translations` directory below the current build directory.

     set_source_files_properties(app_en.ts app_de.ts
         PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")

## Processing Generated .qm Files

To further process the generated `.qm` files, for example to create install rules, `qt_add_lrelease` can store the paths of the `.qm` files in a variable. Pass `QM_FILES_OUTPUT_VARIABLE <variable-name>` to the function for that.

## Build by Default

By default, the command creates a custom target that is added to the default build target. This ensures that the `.qm` files are always up-to-date when the project is built. This behavior can be turned off with the `EXCLUDE_FROM_ALL` argument. In this case, the user must build the `${PROJECT_NAME}_lrelease` target manually.

## Umbrella Target

In addition to the target `${target}_lrelease`, an umbrella target `release_translations` is created. This target will build all `${target}_lrelease` targets that were created with `qt_add_lrelease`.

Pass `NO_GLOBAL_TARGET` to `qt_add_lrelease` to prevent this behavior.

The name of this target can be overridden by setting the variable `QT_GLOBAL_LRELEASE_TARGET` before calling `qt_add_lrelease`.

## Deprecated Command Signature

Older versions of `qt_add_lrelease` took a target as the first argument. This is still possible but deprecated.

## Examples

Add the targets `myapp_lrelease` and `release_translations` for transforming the given `.ts` files into `.qm` files. Also, install the generated `.qm` files. The target `myapp_lrelease` is built by default.

     project(myapp)
     ...
     qt_add_lrelease(
         TS_FILES myapp_de.ts myapp_fr.ts
         QM_FILES_OUTPUT_VARIABLE qm_files
     )
     install(FILES ${qm_files} DESTINATION "translations")

You can specify the name of the created target by passing the `LRELEASE_TARGET` argument:

     qt_add_lrelease(
         LRELEASE_TARGET create_myapp_qm_files
         TS_FILES myapp_de.ts myapp_fr.ts
         QM_FILES_OUTPUT_VARIABLE qm_files
     )