首页 > 编程语言 >cmakelist 编译源码生成动态静态库并链接到项目

cmakelist 编译源码生成动态静态库并链接到项目

时间:2024-05-24 21:26:27浏览次数:23  
标签:cmakelist qtpropertybrowser QTPROPERTYBROWSER CURRENT 编译 PWD 源码 cpp FILES

  • 当我们使用vscode编译c++代码时,需要加入第三方代码,而它没有库时。这时候我们就需要自己写一个Cmakelist编译成库,然后链接到自己的项目上。

  • 下面我以qt的qtpropertybrowser类为例,这个类并不在qt的标准库中,若是在qtcreator中使用,需要在pro引入该文件路径(qt安装目录里-\Qt\5.15.2\Src\qttools\src\shared\qtpropertybrowser),该pri文件如下

    include(../common.pri)
    greaterThan(QT_MAJOR_VERSION, 4): QT *= widgets
    INCLUDEPATH += $$PWD
    DEPENDPATH += $$PWD
    
    qtpropertybrowser-uselib:!qtpropertybrowser-buildlib {
        LIBS += -L$$QTPROPERTYBROWSER_LIBDIR -l$$QTPROPERTYBROWSER_LIBNAME
    } else {
        DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
        SOURCES += $$PWD/qtpropertybrowser.cpp \
                $$PWD/qtpropertymanager.cpp \
                $$PWD/qteditorfactory.cpp \
                $$PWD/qtvariantproperty.cpp \
                $$PWD/qttreepropertybrowser.cpp \
                $$PWD/qtbuttonpropertybrowser.cpp \
                $$PWD/qtgroupboxpropertybrowser.cpp \
                $$PWD/qtpropertybrowserutils.cpp
        HEADERS += $$PWD/qtpropertybrowser.h \
                $$PWD/qtpropertymanager.h \
                $$PWD/qteditorfactory.h \
                $$PWD/qtvariantproperty.h \
                $$PWD/qttreepropertybrowser.h \
                $$PWD/qtbuttonpropertybrowser.h \
                $$PWD/qtgroupboxpropertybrowser.h \
                $$PWD/qtpropertybrowserutils_p.h
        RESOURCES += $$PWD/qtpropertybrowser.qrc
    }
    
    win32 {
        contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTPROPERTYBROWSER_EXPORT
        else:qtpropertybrowser-uselib:DEFINES += QT_QTPROPERTYBROWSER_IMPORT
    }
    
    
  • 简单的转为Cmakelist,如下

    project(qtpropertybrowser)
    
    file(GLOB SRC_FILES ${CMAKE_CURRENT_LIST_DIR}/*.cpp)
    file(GLOB HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/*.h)
    
    add_library(qtpropertybrowser STATIC ${SRC_FILES} ${HEADER_FILES})
    
    target_link_libraries(qtpropertybrowser
        PRIVATE
        Qt5::Widgets
    )
    
    target_include_directories(qtpropertybrowser
        PUBLIC
        ${CMAKE_CURRENT_LIST_DIR}
    )
    
  • 上述为编译为静态库,若是动态库则需要改为如下STATIC改为SHARED,加入-DQT_QTPROPERTYBROWSER_EXPORT的导出配置,这是因为qtpropertybrowser是动态库它原本的qmake中也写了,需要导出信息,否则会报错。

project(qtpropertybrowser)

file(GLOB SRC_FILES ${CMAKE_CURRENT_LIST_DIR}/*.cpp)
file(GLOB HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/*.h)

add_library(qtpropertybrowser SHARED  ${SRC_FILES} ${HEADER_FILES})

target_link_libraries(qtpropertybrowser
    PRIVATE
    Qt5::Widgets
)

 target_compile_definitions(qtpropertybrowser
     PRIVATE
     -DQT_QTPROPERTYBROWSER_EXPORT
 )

target_include_directories(qtpropertybrowser
    PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
)
  • 如此,便使源码生成了库,可以链接到项目中了,需要使用的项目中的cmakelist中加入以下语句

add_subdirectory(qtpropertybrowser)
target_link_libraries(
    .....
    qtpropertybrowser
)

标签:cmakelist,qtpropertybrowser,QTPROPERTYBROWSER,CURRENT,编译,PWD,源码,cpp,FILES
From: https://blog.csdn.net/weixin_49065061/article/details/139064239

相关文章

  • Griffin编译安装
    ApacheGriffin编译安装1.环境准备Maven(ApacheMaven3.6.3)Mysql数据库(可以是PostgreSQL,mysql版本5.7)npm(版本6.14.6)(version6.0.0+,用于编译ui模块)(推荐此版本)Scala(版本2.11.8)Hadoop(版本3.0.0或更高版本)(本地:2.6.0)Hive(版本2.1.1)(本地:1.1.0......
  • Java韩顺平满汉楼项目,带源码!!!
    文章目录满汉楼1、程序框架图2、前置工作:配置相应文件和创建mhl数据库3、需求说明4、界面设计(1)用户登录(2)二级菜单1、显示餐桌状态2、预定餐桌3、显示所有菜品4、点餐服务5、查看账单6、结账9、退出满汉楼5、具体代码(1)先设计界面(2)进行用户登录判断功能实现第一步:在mysql......
  • 美容美发行业收银系统源码、美业SaaS系统源码
    美业SaaS系统连锁多门店美业收银系统源码多门店管理/会员管理/预约管理/排班管理/商品管理/ 促销活动PC管理后台、手机APP、iPadAPP、微信小程序......
  • 美业系统源码美业SaaS系统-门店卡项已线下退款,需要作废怎么处理?
    美业SaaS系统源码连锁门店美业收银系统源码收银管理/会员管理/预约管理/排班管理/商品管理/活动促销PC管理后台、手机APP、iPadAPP、微信小程序1、加盟店卡项线下退款处理方法:询问具体退款会员手机号和卡项,找到需要退款的订单号。操作路径:PC运营后端-订单管......
  • 来自工业界的知识库 RAG 服务(二),RagFlow 源码全流程深度解析
    背景介绍前面介绍过有道QAnything源码解析,通过深入了解工业界的知识库RAG服务,得到了不少调优RAG服务的新想法。因此本次趁热打铁,额外花费一点时间,深入研究了另一个火热的开源RAG服务RagFlow的完整实现流程,希望同样有所收获。项目概述框架设计首先依旧可以先......
  • MATLAB基础知识,帮你快速入门【文末送2024最新MATLAB学习教程资料视频+源码】
    1.MATLAB的基本知识1-1基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >>(5*2+1.3-0.8)*10/25 ans=4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。小......
  • Java基于saas模式云MES制造执行系统源码Spring Boot + Hibernate Validation什么是MES
    Java基于saas模式云MES制造执行系统源码SpringBoot+HibernateValidation什么是MES系统?MES制造执行系统,通过互联网技术实现从订单下达到产品完成的整个生产过程进行优化管理。能有效地对生产现场的流程进行智能控制,防错防呆防漏,自动化集成各种制造信息,使管理者准确掌控工......
  • 社区医院|基于SprinBoot+vue的社区医院管理服务系统(源码+数据库+文档)
    社区医院管理服务系统目录基于SprinBoot+vue的社区医院管理服务系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块4医生功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)
    家乡特色推荐系统目录基于SprinBoot+vue的家乡特色推荐系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......