[项目配置] 包含函数库的整体项目配置

[项目配置] 包含函数库的整体项目配置,第1张

[项目配置] 包含函数库的整体项目配置

博客主页:https://blog.csdn.net/weixin_43197380欢迎点赞  收藏 ⭐留言  如有错误敬请指正!本文由 Loewen丶原创,首发于 CSDN,转载注明出处现在的付出,都会是一种沉淀,只为让你成为更好的人✨


前言

    配置的解决方案主要由三个项目组成:

“VisionLibrary”为基于halcon函数库,主要封装的是一些检测函数;“VisionUILibrary”为QT界面库,通过该库来调用VisionLibrary函数库,从而在QT界面实现一些检测算法的实现;”VisionTestframe”为上位机测试项目,通过其调用前两者,来最终实现视觉项目功能的测试;
函数库“VisionLibrary”的新建与配置

    函数库的创建:VisionLibrary(项目名)——MI_VisionLibrary(类名)——MS_VisionLibrary.h(预处理器块头文件名)

    Debug平台下函数库的配置:右键-》属性
    常规—目标文件名:$(ProjectName)D
    常规—目标文件扩展名:.dll
    常规—配置类型: 动态库(.dll)

    调试—环境:PATH=$ (QTDIR)bin%3b$(PATH)(取消空格)

    目的:自动配置电脑环境中QT和PATH下的所有路径。其中%3b是分号“;”的16进制编码。

    C++ — 常规 — 附加包含目录
    .GeneratedFiles$(ConfigurationName)
    .GeneratedFiles
    .
    $(ProjectDir)include
    $(QTDIR)include
    $(QTDIR)includeQtCore
    $(QTDIR)includeQtGui
    $(QTDIR)includeQtANGLE
    $(QTDIR)includeQtSql
    $(QTDIR)includeQtWidgets
    $(HALCONROOT)includehalconcpp
    $(HALCONROOT)include

    注:VS中的一些路径宏的含义:

    1- $ (QTDIR):配置环境变量中的QT路径,我的电脑环境变量配置如图
    $(QTDIR)include代表:C:QtQt5.12.05.12.0msvc2015_64include
    $(QTDIR)lib代表:C:QtQt5.12.05.12.0msvc2015_64lib

    2- $(HALCONROOT):直接找到环境变量中的Halcon路径
    $(HALCONROOT)includehalconcpp代表:D:SoftWareHalcon13includehalconcpp

    3- $(ProjectDir):代表项目路径
    4- $(SolutionDir):代表解决方案路径
    注:项目路径在解决方案的下一级

    C++ — 预处理器 — 预处理器定义:预处理器在将 C 和 C++文件传递给编译器之前,对这些文件执行初步 *** 作。可以使用预处理器①有条件地编译代码(宏定义,关键还是代码里有#ifdef XXX, #ifndef XXX之类的语句,这样编译的时候才起作用)、插入文件、②指定编译时错误消息,以及将特定于计算机的规则应用于代码部分。
    QT_QML_DEBUG
    UNICODE
    _UNICODE
    WIN32
    _ENABLE_EXTENDED_ALIGNED_STORAGE
    WIN64
    QT_CORE_LIB
    QT_GUI_LIB
    QT_SQL_LIB
    QT_WIDGETS_LIB
    VISIONLIBRARY_LIB

    预处理器定义的相关了解:
    1、VS2010中属性页中,C/C++ -->预处理器定义(针对上面①情况)
    2、vs各种报错,需要添加预处理器定义的情况汇总(针对上面②情况)

    链接器—常规—输出文件 :$(OutDir)$(ProjectName)D.dll
    链接器—常规—附加库目录
    $(QTDIR)lib
    $(HALCONROOT)libx64-win64

    链接器—输入—附加依赖项
    qtmaind.lib
    Qt5Cored.lib
    Qt5Guid.lib
    Qt5Sqld.lib
    Qt5Widgetsd.lib
    halconcpp.lib

    生成事件—后期生成事件:我们用VS开发的时候,如果是项目中引用的DLL,会自动复制到生成目录,但是对于一些非引用的文件,我们又希望编译之后一起复制到指定目录,怎么办呢?那就是需要用到后期生成事件,将编译后的文件和dll拷贝到一个集中的地方,这个对于多项目开发来讲很有帮助。

    1.如果复制路径的目标文件夹不存在(rd /S /Q),需新建文件夹(md)。

    注意:如果创建的路径中带有空格或特殊字符,要将这个路径用引号包裹起来

    我的文件夹路径存在空格,所以需要路径加上“”
    2.将编译后的文件和dll拷贝到一个集中的地方

命令行输入如下:

rd /S /Q "$(SolutionDir)Exportvisioninclude"
md "$(SolutionDir)Exportvisioninclude"

rd /S /Q "$(SolutionDir)Exportvisionlib"
md "$(SolutionDir)Exportvisionlib"

rd /S /Q "$(SolutionDir)Exportvisionbin"
md "$(SolutionDir)Exportvisionbin"

xcopy /Y /S "$(ProjectDir)include*"   "$(SolutionDir)Exportvisioninclude"
xcopy /Y /S "$(SolutionDir)$(Platform)$(Configuration)$(ProjectName)D.lib"  "$(SolutionDir)Exportvisionlib"
xcopy /Y /S "$(SolutionDir)$(Platform)$(Configuration)$(ProjectName)D.dll"  "$(SolutionDir)Exportvisionbin"

界面库“VisionUILibrary”的添加与配置
    界面库的添加:右键解决方案——添加新项目——VisionUILibrary(项目名)——MU_VisionUI(类名)——QWidget(基类)
    项目常规配置同上函数库“VisionLibrary”。项目调试—环境配置同上函数库“VisionLibrary”。项目C++ — 常规 — 附加包含目录相比配置函数库“VisionLibrary”而言,增加了对函数库的包含路径(后两项)。
    .GeneratedFiles$(ConfigurationName)
    .GeneratedFiles
    .
    $(ProjectDir)include
    $(QTDIR)include
    $(QTDIR)includeQtCore
    $(QTDIR)includeQtGui
    $(QTDIR)includeQtANGLE
    $(QTDIR)includeQtSql
    $(QTDIR)includeQtWidgets
    $(HALCONROOT)include
    $(HALCONROOT)includehalconcpp
    $(SolutionDir)VisionLibrary
    $(SolutionDir)ExportvisionincludeC++ — 预处理器 — 预处理器定义:配置同上函数库“VisionLibrary”。链接器—常规—输出文件:$(OutDir)$(ProjectName)D.dll
    链接器—常规—附加库目录:相比配置函数库“VisionLibrary”而言,增加了对函数库的库目录配置(最后一项)
    $(QTDIR)lib
    $(HALCONROOT)libx64-win64
    $(SolutionDir)Exportvisionlib链接器—常规—输入:相比配置函数库“VisionLibrary”而言,增加了对函数库的.lib配置(最后一项)
    qtmaind.lib
    Qt5Cored.lib
    Qt5Guid.lib
    Qt5Sqld.lib
    Qt5Widgetsd.lib
    halconcpp.lib
    VisionLibraryD.lib生成事件—后期生成事件:和配置“VisionLibrary”库一样,只是文件夹名称不一样,最后输出:

命令行输入如下:

rd /S /Q "$(SolutionDir)ExportvisionUiinclude"
md "$(SolutionDir)ExportvisionUiinclude"

rd /S /Q "$(SolutionDir)ExportvisionUilib"
md "$(SolutionDir)ExportvisionUilib"

rd /S /Q "$(SolutionDir)ExportvisionUibin"
md "$(SolutionDir)ExportvisionUibin"

xcopy /Y /S "$(ProjectDir)include*"   "$(SolutionDir)ExportvisionUiinclude"
xcopy /Y /S "$(SolutionDir)$(Platform)$(Configuration)$(ProjectName)D.lib"  "$(SolutionDir)ExportvisionUilib"
xcopy /Y /S "$(SolutionDir)$(Platform)$(Configuration)$(ProjectName)D.dll"  "$(SolutionDir)ExportvisionUibin"

上位机测试项目“VisionTestframe”的添加与配置
    项目的添加:右键解决方案——添加新项目——VisionTestframe(项目名)——VisionTestframe(类名)——QMainWindow(基类)
    常规配置如下:
    项目调试—环境配置同上函数库“VisionLibrary”。项目C++ — 常规 — 附加包含目录相比配置函数库“VisionLibrary”而言,增加了对函数库的包含路径(后两项)。
    .GeneratedFiles$(ConfigurationName)
    .GeneratedFiles
    .
    $(QTDIR)include
    $(QTDIR)includeQtCore
    $(QTDIR)includeQtGui
    $(QTDIR)includeQtANGLE
    $(QTDIR)includeQtWidgets
    $(HALCONROOT)includehalconcpp
    $(HALCONROOT)include
    $(SolutionDir)VisionLibrary
    $(SolutionDir)Exportvisioninclude
    $(SolutionDir)ExportvisionUiincludeC++ — 预处理器 — 预处理器定义
    QT_QML_DEBUG
    QT_CORE_LIB
    QT_GUI_LIB
    QT_WIDGETS_LIB
    UNICODE
    _UNICODE
    WIN32
    _ENABLE_EXTENDED_ALIGNED_STORAGE
    WIN64链接器—常规—附加库目录
    $(QTDIR)lib
    $(HALCONROOT)libx64-win64
    $(SolutionDir)Exportvisionlib
    $(SolutionDir)ExportvisionUilib链接器—输入—附加依赖项
    qtmaind.lib
    Qt5Cored.lib
    Qt5Guid.lib
    Qt5Widgetsd.lib
    halconcpp.lib
    VisionLibraryD.lib
    VisionUILibraryD.lib

总结

至此,Debug平台下函数库、界面库和测试项的添加与配置已经完成,三者的依赖关系和生成顺序如下:

配置中遇到的问题
    配置结束后,编译界面库VisionUILibrary是出现VisionLibrary.cpp(4): warning C4273: “VisionLibrary::VisionLibrary”: dll 链接不一致的问题
    解决:因为我复制的别的项目导出库头文件是这样的

    而我的项目导出库头文件是下面这样的

    所以需要在界面库VisionUILibrary项目中C++ — 预处理器 — 预处理器定义将VISIONLIBRARY_EXPORTS更改为VISIONUILIBRARY_LIB,前面已经更改,大家按照前面的配置是对的,只是我自己刚开始不太理解预处理器定义,完全照搬的别的项目,导致出现问题。
Release平台配置与Debug平台配置的一些差别

    以VisionLibrary函数库的配置为例,界面库和上位机项目配置大同小异

    常规
    预处理器定义
    链接器—常规
    命令行

戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存