前言:
本文整理出“在VS2019的一个解决方案下管理多个QT项目,为一个工程,只有一个mani函数入口”的流程。纯VS多项目管理,与QtCreator构建的多项目管理后附转载链接。
目录
1. 新建项目
原有项目解决方案如下:
项目QtDemo1为创建解决方案时共同创建,也以此作为工程的入口,主项目。
右键解决方案“QtDemo1”>>添加>>新建项目,在弹出的对话框选择“Qt Class Library”
下一步,创建新项目CameraTool,位置默认即可,与项目QtDemo1处在同一级目录下
创建好新项目后,解决方案结构如下
2. 查看项目CameraTool
2.1 接口定义
2.1.1 CameraTool.h
其代码如下:
// CameraTool.h
#pragma once
#include "cameratool_global.h"
class CAMERATOOL_EXPORT CameraTool
{
public:
CameraTool();
};
2.1.2 cameratool_global.h
CAMERATOOL_EXPORT在其中定义,代码如下:
// cameratool_global.h
#pragma once
#include <QtCore/qglobal.h>
#ifndef BUILD_STATIC
# if defined(CAMERATOOL_LIB)
# define CAMERATOOL_EXPORT Q_DECL_EXPORT
# else
# define CAMERATOOL_EXPORT Q_DECL_IMPORT
# endif
#else
# define CAMERATOOL_EXPORT
#endif
2.1.3 CAMERATOOL_LIB
右键项目CameraTool>>属性>>配置属性>>C/C++>>预处理器
项目已为我们添加了预处理器定义。
2.1.4 __declspec()
源码中的定义:
# define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllimport)
以此对这个类进行接口说明,其他的项目才可以通过其动态库(.dll)调用这个类。
2.2 项目执行文件
右键项目CameraTool>>属性>>配置属性>>常规
配置类型为动态库(dll文件),则运行会输出此项目的dll文件,供其他项目(QtDemo1)使用。
同理,查看项目QtDemo1的配置类型:
为常见的可执行文件(exe应用程序),在目录下双击运行即可执行已生成的项目。
项目基本是构建成dll依赖库,供主项目调用。
3. 建立依赖关系
3.1 添加引用
下拉项目QtDemo1>>右键引用>>添加引用>>项目>>解决方案
勾选CameraTool即可确定。
这样在编译阶段,就会先处理CameraTool库,再编译QtDemo1。禁止互相引用,形成回路。
在解决方案中也可设置所有项目的引用关系
右键解决方案>>属性>>通用属性>>项目依赖项
3.2 附加头文件路径
右键项目QtDemo1>>属性>>配置属性>>C/C++>>常规
在“附加包含目录”中添加要引用项目CameraTool的头文件路径“..\CameraTool”,这里是相对路径,便于项目的移动。这里就给了#include "CameraTool.h"寻找头文件的路径。
其中 uic为QT特性,QT可构建图形界面文件(.ui),通过UIC编译器将ui文件编译为扩展C++头文件。编译的头文件便输出在此文件下。
最后,别忘了在项目代码中加上#include。
4. 输出文件
5. 补充
系统的去创建dll项目,省略了许多接口定义、预编译器、链接器上的操作。
VS有关附加库路径,预编译器,链接器等转载:vs2017 项目开发 解决方案下的多个项目_vs中一个解决方案下多个项目-CSDN博客
QT创建子项目转载:Qt Creator管理多个项目_csxiaoshui的博客-CSDN博客