我的.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会更改驱动器的案例处理,这非常令人恼火,但我如何让这一切正常工作?
答案 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。