CMake qt5_add_translation, как указать выходной путь?

Я использую qt5_add_translation для запуска lrelease и создания файлов .qm. По умолчанию файлы .qm помещаются на корневой уровень каталога сборки, независимо от того, куда вы помещаете файлы .ts в исходном каталоге.

Как я могу указать подкаталог для этих файлов в сборке?


person ymoreau    schedule 27.06.2017    source источник


Ответы (2)


Перед вызовом макроса Qt установите свойство в файлах .ts:

set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION your_output_path)

Где TS_FILES содержит список файлов .ts, а your_output_path – это путь, по которому нужно поместить файлы .qm (относительно каталога сборки или абсолютный).

Поскольку макрос извлекает свойство для создания пути к файлам .qm (проверено с Qt 5.9):

get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION)
if(output_location)
    file(MAKE_DIRECTORY "${output_location}")
    set(qm "${output_location}/${qm}.qm")
else()
    set(qm "${CMAKE_CURRENT_BINARY_DIR}/${qm}.qm")
endif()
person ymoreau    schedule 27.06.2017

Использовать ручной вызов утилит lrelease и lupdate

set(TS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/translations")

set(TS_FILES
    "${TS_DIR}/${PROJECT_NAME}_ru_RU.ts"
)

find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)

foreach(_ts_file ${TS_FILES})

    execute_process(
        COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${_ts_file})
    execute_process(
        COMMAND ${LRELEASE_EXECUTABLE} ${_ts_file})

endforeach()
person Andrey Yankovich    schedule 15.05.2020