由于资本化,qmake 4.8.4已经破坏了自定义目标。我该如何解决这个问题?

时间:2018-01-12 10:37:46

标签: qmake

我的.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.targetPRE_TARGETDEPS删除完整路径,那么它就可以解决该问题,但在计算依赖关系时,包含生成的标头的cpp文件的规则将更改为给出依赖项中标头的显式路径,该路径指向源目录,而不是生成生成文件的输出目录。这会导致make到barf而不会生成生成的文件。

我不知道为什么qmake会更改驱动器的案例处理,这非常令人恼火,但我如何让这一切正常工作?

1 个答案:

答案 0 :(得分:0)

没有好的解决方案。我想出的最好的方法是使用一个总是运行的伪目标来生成头文件。在缺点方面,当头文件已经存在时,这会减慢构建速度,但从好的方面来说,它允许构建完成。

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。