• 7691阅读
  • 16回复

[提问]QtCreator是如何自动搜索MSVC工具链的呢?我能不能自己添加一个? [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-03
QtCreator不能自己添加MSVC编译器,翻了一下代码也没搔到痒处……
我目前有这么一个需求
因为VS2012编译XP下运行的程序需要额外设置一些变量,我把它们写进了bat中,然后去调用我的固定位置的vcvarsall.bat。
现在我希望我的bat能像creator一样自动探知vcvarsall.bat的位置,这样设置完额外环境变量就直接进入vc自己的环境变量设置,即使vs安装在了另外的位置。
另一方面我也希望自己的bat能够像vcvarsall.bat一样被creator感知,这样就不用跑到cmd下编译,直接在creator下构建就行了。
但是我又不希望修改vcvarsall,除非迫不得已……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 1楼 发表于: 2013-01-03
又要石沉大海了吗
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线liuboadsl
只看该作者 2楼 发表于: 2013-01-03
哎. 这里没啥人气啊.. 怪冷冷清清的
离线roywillow

只看该作者 3楼 发表于: 2013-01-03
回 2楼(liuboadsl) 的帖子
nonono,前两天Qt5刚出来的时候相当火爆,各种编译相关
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线liuboadsl
只看该作者 4楼 发表于: 2013-01-03
哦.. 我今天才来.. 前两发生的事情也不很清楚.. 我感觉这地儿不错..  只是感觉人气能再旺点就好了
离线XChinux

只看该作者 5楼 发表于: 2013-01-03
休息日人们都休息了,还上来研究问题的人少。没研究过QtCreator源码如何实现的,但无外乎读注册表和获取环境变量两和途径来自动探测系统已安装的MSVC编译器。所以可从这两方面入手。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 6楼 发表于: 2013-01-03
回 5楼(XChinux) 的帖子
从环境变来来看,没有找到Path中有vs的东西,2012的SQL倒是有……
注册表的话我觉得范围有些太大了,尝试搜索了一下vcvarsall.bat,然后花了很久,在一个很奇怪的地方搜索到一条,不是一个可以人工理解的位置,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\C57A173F66D0E5B3DA585B6CF098AE10
然后F3继续搜索,没了……

另外我发现我装完WinSDK7.1,它的配置程序竟然也能搜索到VS2012里的SDK,对此也比较感兴趣,因为这个或许可以用来自动寻找7.1A的路径

像我这种业余爱好者反倒只有在休息的时候才能专注这里……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 7楼 发表于: 2013-01-04
回 6楼(roywillow) 的帖子
第一步:
修改注册表(记得备份),看效果。
第二步:
VS的东东其中一部分必须要安装到C盘,是不可以修改的,是不是就是搜索固定的目录?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 8楼 发表于: 2013-01-04
回 7楼(jdwx) 的帖子
注册表我再搜索一下其它条目试试
vs2012来看,SDK是全部丢在C盘的, 但似乎还会有(x86)方面的问题
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线realfan

只看该作者 9楼 发表于: 2013-01-04
手工改一下
%APPDATA%\QtProject\qtcreator目录下toolchains.xml等几个xml文件试试
离线roywillow

只看该作者 10楼 发表于: 2013-01-04
回 9楼(realfan) 的帖子
<value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Msvc:{48c11273-7ce1-47a3-9325-d046d7e5137b}</value>
有这么一条我完全不知道该如何去构造……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线realfan

只看该作者 11楼 发表于: 2013-01-04
回 10楼(roywillow) 的帖子
我觉得花括号里面的可以照着自己编一个,只是作为一个唯一的标识,只要别和其它的重复。
这个id会在profiles.xml中用。
离线roywillow

只看该作者 12楼 发表于: 2013-01-04
回 11楼(realfan) 的帖子
Good job!
复制了一条msvc的条目,然后把autodetected改成false,那个id我把后两位改了一下,然后toolchain count加1,creator就能识别了并且正常工作!
要这么来看,也能自己添加嘛……为啥creator不提供这功能呢

不过这也只能算是从表面上解决了吧……还是希望能了解一下更深层的机制
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 13楼 发表于: 2013-01-07
其实我这问题才算解决一半呐又要沉了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线skykingf

只看该作者 14楼 发表于: 2013-01-11
偶也想知道啊 用qt的真不多
离线roywillow

只看该作者 15楼 发表于: 2013-01-12
回 14楼(skykingf) 的帖子
今天抽时间找了一下源码,msvctoolchain.cpp中,应该是通过遍历注册表中HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\VC7或者HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7中的键来寻找已安装的msvc
具体方式似乎是遍历所有的键,寻找键名中有“.”的键,然后就认为这个键的键名是个版本号(比如11.0),然后它的键值就是这个版本的vc安装的路径
有了这个路径后,就认为其中的vcvarsall.bat和bin\vcvars32.bat一定存在,并且vcvarsall.bat可以接受x86、amd64、x86_amd64等参数。但是实际上这些工具链是不是真的存在,qtcreator并没有去实际测试
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线skykingf

只看该作者 16楼 发表于: 2013-01-12
回 15楼(roywillow) 的帖子
恩 看来这程序编的还是很烂的 怪不得我一直用creator找不到编译器
快速回复
限100 字节
 
上一个 下一个