gpt4 book ai didi

linux - 如何创建运行自定义生成事件的 Makefile 或 .pro 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:08 26 4
gpt4 key购买 nike

我目前使用一个小程序来处理 Qt 表单(.ui)文件并自动生成具有公共(public)基类的类,并使用虚函数来访问表单元素。在 Windows 上,我将此工具作为 ui 表单文件上的自定义构建步骤运行。该工具的唯一参数是输入文件名。

澄清一下,在 Windows 上,Qt 在 .ui 文件上运行 uic,创建一个 ui_filename.h 文件。我需要在那个 文件上运行我的工具。

我如何/应该在 Linux 上执行此操作?理想情况下,我会将其构建到 .pro 文件中,但我也很乐意编辑 Makefile。

我不擅长编写 Makefile,所以这可能非常简单。我很乐意为每个 ui_ 或 *.ui 文件手动编写命令,但理想情况下它会自动为所有 .ui 文件发生。

最佳答案

无需手动编写 Makefile。调用自定义外部工具的 Makefile 可以通过 qmake 从项目文件 .pro 生成。

需要使用 QMAKE_EXTRA_TARGETS 创建自定义目标。然后应将主要目标设置为该自定义目标的依赖项(自定义目标名称应添加到 PRE_TARGETDEPS),例如 How to modify the PATH variable in Qt Creator's project file (.pro)

该工具应在生成表单标题后运行,因此自定义目标应依赖于该文件customtarget1.depends = ui_mainwindow.h:

customtarget1.target = form_scanner
customtarget1.commands = tool_win_bat_or_linux_shell.sh
customtarget1.depends = ui_mainwindow.h
QMAKE_EXTRA_TARGETS += customtarget1
PRE_TARGETDEPS += form_scanner

上述 qmake 命令创建以下 Makefile 规则:

# the form header depends on mainwindow.ui
ui_mainwindow.h: ..\test\mainwindow.ui
<tab>#build command...

# form scanner depends on ui_mainwindow.h
form_scanner: ui_mainwindow.h
<tab>tool_win_bat_or_linux_shell.sh

# the final target depends on form scanner
$(DESTDIR_TARGET): form_scanner ui_mainwindowm.h $(OBJECTS)

如果有许多表单,则可以创建许多自定义目标或创建一个依赖于所有表单文件的目标:

for (form, FORMS) {
# autogenerated form headers are located in root of build directory
FILE_NAME = $$basename(form)
# prepend ui_ and replace ending .ui by .h
FORM_HEADERS += ui_$$replace(FILE_NAME, .ui$, .h)
}

customtarget1.target = form_scanner
customtarget1.commands = tool_win_bat_or_linux_shell.sh
customtarget1.depends = $$FORM_HEADERS

QMAKE_EXTRA_TARGETS += customtarget1
PRE_TARGETDEPS += form_scanner

因此,命令tool_win_bat_or_linux_shell.sh仅在生成所有表单标题时执行。

也可以从项目目录 $$PWD 运行 shell 脚本,并将表单头文件名作为命令行参数传递:

customtarget1.commands = $$PWD/tool_win_bat_or_linux_shell.sh $$FORM_HEADERS

现在 shell 脚本可以为每个表单标题运行一些命令tool_win_bat_or_linux_shell.sh:

# for each command line argument
for file in "$@"
do
echo "$file"
ls -l $file
done

关于linux - 如何创建运行自定义生成事件的 Makefile 或 .pro 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com