以下是我正在使用的命令(automoc不适用于mu),它完美地工作
qt5_wrap_ui(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
qt5_wrap_ui(main_win_ui ${HW_DATA_DIR}/main_window.ui)
qt5_wrap_ui(user_list_ui ${HW_DATA_DIR}/user_list.ui)
项目布局
Project
--incl
--src
--data(The path of HW_DATA_DIR)
问题是,原始命令会生成文件名为
但我想要的是
我怎样才能通过cmake实现这一目标?谢谢
答案 0 :(得分:1)
如果你真的想要更改qt5_wrap_ui
功能的输出文件的名称,你可以制作一个自定义版本,它实际上是现有版本的副本。它位于lib/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake
下的Qt安装中,如下所示:
include(CMakeParseArguments)
# qt5_wrap_ui(outfiles inputfile ... )
function(QT5_WRAP_UI outfiles )
set(options)
set(oneValueArgs)
set(multiValueArgs OPTIONS)
cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS})
set(ui_options ${_WRAP_UI_OPTIONS})
foreach(it ${ui_files})
get_filename_component(outfile ${it} NAME_WE)
get_filename_component(infile ${it} ABSOLUTE)
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
ARGS ${ui_options} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile} VERBATIM)
list(APPEND ${outfiles} ${outfile})
endforeach()
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
endfunction()
为此,请从Qt5WidgetsMacros.cmake
文件中获取代码并将其存储在另一个文件中,例如Qt5Customizations.cmake
。您所要做的就是将函数名称重命名为突出显示自定义的内容:
function(QT5_WRAP_UI outfiles )
将其更改为例如:
function(QT5_WRAP_UI_CUSTOM outfiles )
您必须更改存储输出ui文件的行:
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
要 set(outfile $ {CMAKE_CURRENT_BINARY_DIR} / $ {outfile} _ui.h)
如果您现在在项目的CMake脚本中包含自定义CMake脚本,请执行以下操作:
include( Qt5Customizations )
您现在可以使用自定义功能:
qt5_wrap_ui_custom(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
并使用
包含生成的ui文件#include "import_dialog_ui.h"