由于大写,qmake 4.8.4 打破了自定义目标。我该如何解决?
qmake 4.8.4 has broken custom targets due to capitalisation. How do I work around it?
我的 .pro 文件中有额外的内容:
win32 {
OUT_PWD_SHELL = $$replace(OUT_PWD, /, \)
autoversion.target = $$OUT_PWD\autoversioninfo.h
autoversion.depends = FORCE
autoversion.commands = $$PWD/../../AutoBuildVersion.exe $$replace(PWD, /, \) $$OUT_PWD_SHELL
QMAKE_EXTRA_TARGETS += autoversion
PRE_TARGETDEPS += $$OUT_PWD\autoversioninfo.h
}
这未能按预期工作,因为在生成的 makefile 中 DESTDIR_TARGET
添加了一个以 d:\
开头的新依赖项,但为 autoversion 生成的规则以 D:/
开头。我可以通过将所有 /
替换为 \
来稍微改进这一点,但区分大小写仍然会破坏它并且目标未构建。
如果我从 autoversion.target
和 PRE_TARGETDEPS
中删除完整路径,那么问题就解决了,但是在计算依赖关系时,cpp
文件的规则包括生成的 header 更改为在依赖项中提供 header 的显式路径,并且该路径指向源目录而不是生成生成文件的输出目录。这会导致 make 无法生成生成的文件。
我不知道为什么 qmake 会改变驱动器的大小写处理,这很烦人,但我怎样才能让这一切正常工作?
没有好的解决办法。我想出的最好办法是使用一个始终运行的虚假目标来生成头文件。不利的一面是,当头文件已经存在时,这会减慢构建速度,但有利的一面是,它允许构建完成。
win32 {
OUT_PWD_SHELL = $$replace(OUT_PWD, /, \)
gen_autoversion.target = GENERATE_AUTOVERSIONINFO
gen_autoversion.commands = $$PWD/../../AutoBuildVersion.exe $$replace(PWD, /, \) $$OUT_PWD_SHELL
QMAKE_EXTRA_TARGETS += gen_autoversion
PRE_TARGETDEPS += GENERATE_AUTOVERSIONINFO
}
我不确定这里是否真的需要 PRE_TARGETDEPS。
我的 .pro 文件中有额外的内容:
win32 {
OUT_PWD_SHELL = $$replace(OUT_PWD, /, \)
autoversion.target = $$OUT_PWD\autoversioninfo.h
autoversion.depends = FORCE
autoversion.commands = $$PWD/../../AutoBuildVersion.exe $$replace(PWD, /, \) $$OUT_PWD_SHELL
QMAKE_EXTRA_TARGETS += autoversion
PRE_TARGETDEPS += $$OUT_PWD\autoversioninfo.h
}
这未能按预期工作,因为在生成的 makefile 中 DESTDIR_TARGET
添加了一个以 d:\
开头的新依赖项,但为 autoversion 生成的规则以 D:/
开头。我可以通过将所有 /
替换为 \
来稍微改进这一点,但区分大小写仍然会破坏它并且目标未构建。
如果我从 autoversion.target
和 PRE_TARGETDEPS
中删除完整路径,那么问题就解决了,但是在计算依赖关系时,cpp
文件的规则包括生成的 header 更改为在依赖项中提供 header 的显式路径,并且该路径指向源目录而不是生成生成文件的输出目录。这会导致 make 无法生成生成的文件。
我不知道为什么 qmake 会改变驱动器的大小写处理,这很烦人,但我怎样才能让这一切正常工作?
没有好的解决办法。我想出的最好办法是使用一个始终运行的虚假目标来生成头文件。不利的一面是,当头文件已经存在时,这会减慢构建速度,但有利的一面是,它允许构建完成。
win32 {
OUT_PWD_SHELL = $$replace(OUT_PWD, /, \)
gen_autoversion.target = GENERATE_AUTOVERSIONINFO
gen_autoversion.commands = $$PWD/../../AutoBuildVersion.exe $$replace(PWD, /, \) $$OUT_PWD_SHELL
QMAKE_EXTRA_TARGETS += gen_autoversion
PRE_TARGETDEPS += GENERATE_AUTOVERSIONINFO
}
我不确定这里是否真的需要 PRE_TARGETDEPS。