想在qt的项目文件 pro 文件中设置环境变量PATH检测,以避免程序启动缺少相关的dll文件,便于项目备份迁移时候提醒。
可设置了 contains ,几乎不起作用。
官方说明:
contains(variablename, value)
Succeeds if the variable
variablenamecontains the valuevalue; otherwise fails. It is possible to specify a regular expression for parameter value.You can check the return value of this function using a scope.
For example:
contains( drivers, network ) { # drivers contains 'network' message( "Configuring for network build..." ) HEADERS += network.h SOURCES += network.cpp }The contents of the scope are only processed if the
driversvariable contains the valuenetwork. If this is the case, the appropriate files are added to the SOURCES and HEADERS variables.
这里其实是一个坑,这个contains不是包含network,而是包含某个item,一项是network。而每个项的分隔符是空格,所以范例中的network是一个字。如果drivers中包含 network-script,则contains(drivers,network)这个表达式结果是false。而环境变量 PATH的分割符是分号“;”,所以这个contains不能直接用。
修改如下:
通过split函数分割;的每个项目,这样处理结果传递给PATH变量,这样的变量能被contains处理,也支持每个小项中包含空格。
这样就通过了,如果PATH没有对应的MYLIB目录,编译生成停止。
后记Mac OS X
本来以为Mac OS X 下需要处理 DYLD_LIBRARY_PATH 变量。结果出乎意料
感觉 QT在构建和运行时候,环境是不一样的。
构建的时候
运行的环境变量

可以看到, pro 文件运行 qmake构建的时候,DYLD_LIBRARY_PATH是没有的。此时的检测DYLD_LIBRARY_PATH是没有意义的。而且好像无需另外的 .profile的bash中设置。构建时候会根据打开时候的pro文件,在lib里自动添加。
就是修改完毕pro文件后,最好退出QT Creator 一次。
本文介绍在QT项目中如何正确设置和检测环境变量PATH,避免因缺失DLL文件导致的程序启动问题,特别关注了contains函数的使用限制及split函数的解决方案。
1037

被折叠的 条评论
为什么被折叠?



