如何通过终端或QMake获取MSYS的安装盘符/路径?
如何通过终端或QMake获取MSYS的安装盘符/路径?
这个问题我之前也碰到过——把MSYS移到外接盘后,之前硬写的C盘路径全失效,确实挺头疼的。下面给你两种靠谱的解决思路,分别从MSYS终端和QMake脚本入手,完美适配动态路径:
一、在MSYS终端里获取安装路径
MSYS自带的cygpath工具是处理路径转换的神器,直接用它就能拿到Windows格式的MSYS根目录:
- 打开MSYS终端,执行这条命令:
它会输出MSYS安装目录的Windows绝对路径,比如cygpath -w /D:\msys64,你一眼就能看到盘符。 - 如果想直接提取盘符,可以搭配
cut命令:
输出就是cygpath -w / | cut -d'\' -f1D:这样的盘符。
另外,MSYS的环境变量里也藏着线索:MSYSTEM_PREFIX变量存储了MSYS的根路径(POSIX格式),同样用cygpath转成Windows格式就行:
cygpath -w $MSYSTEM_PREFIX
二、在QMake里动态适配路径
既然你的需求是在QMake项目里自动适配,直接把上面的逻辑集成到.pro文件里就好,不用再硬编码盘符:
基础版实现
直接调用cygpath获取MSYS根路径,然后拼接VTK的路径:
win32 { # 调用cygpath获取MSYS根目录的Windows格式路径 MSYS_ROOT = $$system(cygpath -w /) # 拼接VTK的include和lib路径 INCLUDEPATH += $$MSYS_ROOT/mingw64/include/vtk-$${VTKVERSION} LIBS += -L$$MSYS_ROOT/mingw64/lib } else { INCLUDEPATH += $$VTKINCPATH LIBS += -L$$VTKLIBPATH }
进阶版:兼容32/64位MSYS
如果你的项目可能在32位MSYS环境下编译,还可以通过MSYSTEM环境变量判断,自动切换mingw32/mingw64子目录:
win32 { # 检查是否处于MSYS编译环境 MSYSTEM = $$(MSYSTEM) !isEmpty(MSYSTEM) { MSYS_ROOT = $$system(cygpath -w /) # 根据MSYS架构选择mingw子目录 MINGW_SUBDIR = mingw64 equals(MSYSTEM, MINGW32) { MINGW_SUBDIR = mingw32 } # 动态拼接路径 INCLUDEPATH += $$MSYS_ROOT/$$MINGW_SUBDIR/include/vtk-$${VTKVERSION} LIBS += -L$$MSYS_ROOT/$$MINGW_SUBDIR/lib } else { # 非MSYS的Windows环境,沿用原有逻辑 INCLUDEPATH += $$VTKINCPATH LIBS += -L$$VTKLIBPATH } } else { INCLUDEPATH += $$VTKINCPATH LIBS += -L$$VTKLIBPATH }
这个方案的好处是不管你把MSYS装在C盘、D盘还是其他外接存储,QMake都会自动识别路径,再也不用手动修改.pro文件里的硬编码路径了。
备注:内容来源于stack exchange,提问作者Tyler Shellberg
相关产品推荐
相关产品推荐

