vscode怎么写qt项目_CV01-03: Qt在VSCode的配置与编译
Qt的开发也算博大精深,是一套完整的开发体系,我仅仅是想使用GUI部分,后面可能会涉及到网络与多线程部分。搭建环境是万里长征第一步,也很重要。本主题是Mac环境下的安装搭建(其他系统可能编译环境不同而略有差异)。说明Qt的库、头文件比较多,离开Qt Creator或者qmake工具编译链接Qt程序,非常麻烦。个人喜欢VSCode,所以在VSCode下手工搭建Qt的开发环境;前置条件环境:Mac O
Qt的开发也算博大精深,是一套完整的开发体系,我仅仅是想使用GUI部分,后面可能会涉及到网络与多线程部分。搭建环境是万里长征第一步,也很重要。本主题是Mac环境下的安装搭建(其他系统可能编译环境不同而略有差异)。
说明
Qt的库、头文件比较多,离开Qt Creator或者qmake工具编译链接Qt程序,非常麻烦。
个人喜欢VSCode,所以在VSCode下手工搭建Qt的开发环境;
前置条件
环境:
Mac OS X 10.14.6
Qt版本
5.12.1
Qt的安装
是有那个官方提供的dmg文件安装;
安装的问题:
头文件与库都安装在指定的目录下,头没有拷贝到系统的/usr/include或者/usr/local/include下,库文件也没有拷贝到/usr/lib与/usr/local/lib目录下
Qt自带的工具qmake,uic等工具与没有拷贝到系统指定的PATH环境变量中。
头文件的处理
问题
Mac OS X安装Qt后的头文件有两个问题
Qt的头文件采用C++无.h风格,C.h风格,头文件的引用关系比较混乱(Qt自己管理是非常清晰的);
大量使用QtWidgets/qapplication.h,但实际安装的framework目录下,没有QWidgets目录;
其中qconfig.h文件使用风格是QtCore/qconfig.h,实际上QtCore这个目录下没有qconfig.h头文件;
解决办法
头文件目录的问题
使用安装目录下源代码目录中的头文件
头文件是编译时使用,主要用来检测类型、函数、类的定义;与链接无关,只要是正确的,使用哪个无所谓。
下面是安装目录下的源代码目录结构:
Qt5.12安装后的目录结构
在VSCode下的头文件配置
需要使用的就慢慢添加!
在VSCode下配置include
在编译命令行中头文件配置
这个太多,命令行非常长。
使用-I(大写的i)选项参数指定多个头文件所在目录。
g++ -omain main.cpp
-std=c++11
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtCore
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/GtGui
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtWidgets
-F/Users/yangqiang/Qt512/5.12.1/clang_64/lib
-framework QtCore
-framework QtGui
-framework QtWidgets
-Wl,-rpath,/Users/yangqiang/Qt512/5.12.1/clang_64/lib
QtCore目录下没有qconfig.h文件的问题解决,有两个解决方法:
从其他地方拷贝一个过去
在Src在重新编译一次(qconfig.h不是Qt的一部分,而是编译的时候动态产生的环境参数文件)【提示:不需要安装就有】
首先执行:./configure命令产生配置文件;
然后执行:make命令编译链接;【提示:Qt编译安装时间long long ago!】
最后,需要可以执行:make install命令安装;
我采用重新编译的方法。
重新编译后,在源代码目录有config.h文件
动态库的处理
问题
动态库有两个问题
动态库的路径问题,因为Mac OS采用的framework格式,所以clang编译器中使用的方式不同;
执行的时候,可能找不到动态库;
解决办法
动态库查找问题
使用-L选项参数指定动态库的路径;
对framework使用-F选项参数指定路径;
framework的指定问题
使用-framework选项参数指定;
通过上面的步骤,可以编译链接成功,但是存在一个找不到动态库的问题:
因为Qt的库安装的时候,没有拷贝到系统库目录;
运行的错误截图
库找不到问题的解决:
在编译的时候,直接指定动态库位置(可以指定当前路径相对的某个目录下)
clang是编译器,连接器是ld(自动调用,其中手工调用也非常麻烦,包含系统的一些目标文件关联),可以在clang调用的时候传递参数给ld
-Wl选项参数就是用来传递链接参数给ld的。
clang的-Wl参数说明
-Wl参数是给连接器传递参数的选项
ld的动态库位置指定参数说明
rpath是指运行时的动态库搜索路径
最终的编译指令为:
g++ -omain main.cpp
-std=c++11
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtCore
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/GtGui
-I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtWidgets
-F/Users/yangqiang/Qt512/5.12.1/clang_64/lib
-framework QtCore
-framework QtGui
-framework QtWidgets
-Wl,-rpath,/Users/yangqiang/Qt512/5.12.1/clang_64/lib
Qt工具环境的处理
这个问题解决直接使用PATH环境变量设置即可
在系统与用户配置文件配置profile与.bash_profile
使用export PATH=${PATH}:/Users/yangqiang/Qt512/5.12.1/clang_64/bin:.
一个例子
代码
#include
#include
#include
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
QDialog dlg;
dlg.setWindowTitle("Qt程序");
dlg.setGeometry(100,100,400,300);
dlg.show();
return app.exec();
}
// 编译命令:g++ -omain main.cpp -std=c++11 -I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include -I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtCore -I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/GtGui -I/Users/yangqiang/Qt512/5.12.1/Src/qtbase/include/QtWidgets -F/Users/yangqiang/Qt512/5.12.1/clang_64/lib -framework QtCore -framework QtGui -framework QtWidgets -Wl,-rpath,/Users/yangqiang/Qt512/5.12.1/clang_64/lib
// 环境命令:export PATH=${PATH}:/Users/yangqiang/Qt512/5.12.1/clang_64/bin:.
编译成功,并运行的截图
附录
Qt编译过程
命令:make
make依赖Makefile文件运行
安装过程
注意:需要权限
需要切换到root用户
命令:make install
Make安装!
更多推荐
所有评论(0)