QMAKE 4.8.4 由于大写而打破了自定义目标.我该如何解决它



我的.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: 开头,但为自动版本生成的规则以 D:/ 开头。我可以通过将所有/替换为来稍微改善这一点,但区分大小写仍然会破坏它并且没有构建目标。

如果我从autoversion.target中删除完整路径并PRE_TARGETDEPS那么它解决了这个问题,但是在计算依赖项时,包含生成的标头的cpp文件的规则会发生变化,以提供依赖项中标头的显式路径,并且该路径指向源目录,而不是生成生成文件的输出目录。这会导致 make 到 barf 并且不生成生成的文件。

我不知道为什么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。

最新更新