在QtCreator中,您可以设置自定义命令,而无需手动修改qmake文件,因为这样会影响项目中的其他人。
因此,如果您只想为自己设置自定义命令,并且不会为其他人带来麻烦,建议使用QtCreator的GUI按照以下步骤操作:
下面是如何设置相应参数的屏幕截图:
使用QtCreator的GUI,您可以轻松更改顺序,而无需触及项目文件。这样做的用例包括:
在qml文件正确验证之前,您不想运行任何步骤,甚至不想运行qmake。
您只有C++文件,因此不存在“链接”这样的概念。
等等。
除了QtCreator外,还有其他通用方法可用于设置自定义命令,例如将命令放入变量中:
QMAKE_PRE_LINK = qmllint $$PWD/path/to/myFile.qml
QMAKE_POST_LINK = qmllint $$PWD/path/to/myFile.qml
System command execution from your qmake project file
system("qmllint $$PWD/path/to/myFile.ml")
Adding custom targets with QMAKE_EXTRA_TARGETS
qmllinttarget.commands = qmllint $$PWD/path/to/myFile.qml
QMAKE_EXTRA_TARGETS += qmllinttarget
我相信这个问题的关键点 不是 为了一个已知名称的单个文件进行检查,而是在项目的所有qml文件上运行qmllint。理想情况下,这应该在构建任何内容之前完成,因为带有错误的qml文件的构建很可能没有实际价值。
扩展lpapp的答案并稍微试验一下qmake,我得出了这个解决方案:
ALL_PWD_QML_FILES = $$files($${_PRO_FILE_PWD_}/*.qml , true)
# a command that creates an empty file with a given name.
win32 {
MY_TOUCH_CMD = copy NUL
} else {
MY_TOUCH_CMD = touch
}
qmllint.output = .qmllint/${QMAKE_FILE_BASE}.qmllint
qmllint.input = ALL_PWD_QML_FILES
qmllint.commands = qmllint ${QMAKE_FILE_NAME} && $${MY_TOUCH_CMD} ${QMAKE_FILE_OUT}
qmllint.CONFIG += no_link recursive target_predeps
QMAKE_EXTRA_COMPILERS += qmllint
QMAKE_POST_LINK
变量,例如:QMAKE_POST_LINK = qmllint $$PWD/QMLFiles/myFile.qml