Qt tips 之使用 VS 配置 Qt 项目时修改 qtvars.pro 等 qmake 相关文件的输出路径

前排预警

说来话长,这是一个强迫症重症患者的犯病时刻,没用的知识又增加了。

背景

每次使用 VS 新建 Qt 项目,都会遇到这样的一个问题:
项目属性中设置了项目的中间目录后,编译程序,在项目文件夹下仍然会出现一堆 qmake 相关的中间文件。
如图:
属性设置
临时文件目录
临时文件
文件路径:

  • 解决方案路径:D:\Code\Test
  • 项目路径:D:\Code\Test\Test
  • 临时文件路径:D:\Code\Test\Temp
  • qmake 相关文件的输出路径:D:\Code\Test\Test\x64\Debug\qmake\temp

what !什么情况!我明明设置了中间路径,为啥又冒出来这一堆玩意?
先不管这一堆文件是干啥的,就这些,强迫症真的受不了这些,于是开始了探究之路。

问题探究

为什么会出现这样的问题?在 VS 的属性菜单中找了好久好久,真的没有发现相关能设置的东西。

搜索之际,在 stackoverflow 上发现了一个网友的问答:stackoverflow 回答
stackoverflow  回答

看了下网友的回答,意思就是在项目的 .vcxproj 文件中,先引用了 QtMsBuild 的一个文件,然后再引用了我们在项目配置中设置的输出路径。

我的项目文件 Test.vcxproj:
Test.vcxproj
看了一下还真是这样,先引用了 $(QtMsBuild)\Qt.props 文件,然后再引用 Configuration 属性设置。
那就把 Configuration 属性设置的这一段移动到引用 $(QtMsBuild)\Qt.props 文件的那一段上面。
试了一下,还真的可以,那一堆文件生成路径真的变成了我前面设置的路径。

但是,难道每次新建项目都要这么手动修改么,有没有简单点的办法?

看一下 $(QtMsBuild)\Qt.props 文件,我的电脑中,这个文件在 C:\Users\MC\AppData\Local\Microsoft\VisualStudio\15.0_a8a73fe4\Extensions\sdkitjev.5yl\QtMSBuild 路径下面。

打开看一下 Qt.props 文件,里面引用了 qt_private.props 文件。
Qt.props

打开看一下 qt_private.props 文件,发现里面定义了 QtVarsOutputDir。
qt_private.props
这个 QtVarsOutputDir 变量就是 qmake 相关文件的生成路径,把 “qmake” 改成 “xxx”,编译一下程序,确实文件夹的名称变成了 “xxx”。
$(IntDir) 就是我们设置的中间路径,默认值是 $(Platform)$(Configuration)\,这个文件先引用的,后面再修改 Configuration 属性设置已经晚了,所以 qmake 相关的临时文件就生成在了 D:\Code\Test\Test\x64\Debug\qmake\temp 文件夹下。

就这么简单就可以解决了?不是的。
这个 QtMsBuild 文件夹下的文件是临时文件,下次还是会重置的,所以这也不是终极解决方案。

那要怎么解决?是不是修改 VS 的 .vcxproj 文件生成逻辑就可以了?
查了下资料,项目的生成是靠着 VS 中的一些模板生成的。

那我新建的 Qt 程序的模板在哪里?当然是我安装 Qt VS Tools 插件的目录下,找一下我的插件目录。
我用的是 VS 2017,插件路径是 C:\Users\MC\AppData\Local\Microsoft\VisualStudio\15.0_a8a73fe4\Extensions\sdkitjev.5yl。
后面有个文件夹 ProjectTemplates\VC\Qt\1033,这里面的文件夹和新建 Qt 项目的模板一一对应。
ProjectTemplates
Qt 模板
gui 文件夹对应的就是 Qt Widgets Application 这个模板,里面有个文件 gui.vcxproj,简单看一下其中的一段:
gui.vcxproj
这里面的东西,真的和我们新建出来的 Test.vcxproj 项目文件一一对应,看来这就是我们寻找的项目模板文件,只要把这个模板文件修改了,问题就应该可以解决了。

解决方案

观察下我们的 Test.vcxproj 文件,引用 $(QtMsBuild)\Qt.props 文件的那一段对应的是 $ PropertySheets $,引用 Configuration 属性设置的那一段对应的就是 $ Properties $,把它移动到上面就好了。
修改后的 gui.vcxproj
同理,再修改其他模板文件就可以了。

(在插件重新安装,或者更新之后,这些文件的修改应该会被重置,未实测)

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值