zoukankan      html  css  js  c++  java
  • Linux Qt动态库的创建和使用

    一.创建动态库

    1.     编写一个共享库类,比如:
      //..base.h
      class Base : public QObject
      {
          Q_OBJECT
      public:
          explicit Base(QObject *parent = 0);
          void PrintLog(QString);
      };
      
      
      //..bash.cpp
      Base::Base(QObject *parent) :
          QObject(parent)
      {
      }
      
      void Base::PrintLog(QString s)
      {
          qDebug()<<s;
      }
      
    2. 修改(1)的.pro文件
      //..base.pro
      QT       += core
      QT       -= gui
      
      TEMPLATE = lib
      TARGET = base
      SOURCES += base.cpp
      HEADERS += base.h
      DEFINES += BASE
    3. qmake,make产生动态库libbase

    二.使用动态库

    1.   修改test.pro
      QT       += core #需要自己看着办
      QT       -= gui    #
      
      TARGET = test
      CONFIG   += console
      CONFIG   -= app_bundle
      TEMPLATE = app
      
      #INCLUDEPATH:应用程序所需的额外的包含路径列表
      INCLUDEPATH += ./lib #注:此时lib放在编译目标地址的源目录下面
      
      #DEPENDPATH:应用程序所依赖的搜索路径
      DEPENDPATH += ./lib 
      
      #-L添加目录,-l指定共享库名称
      LIBS += -L./lib -lbase
      
      SOURCES += main.cpp
    2. 使用libbase
      #include "base.h" //注意需要添加响应头文件
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
          Base b;
          b.PrintLog("123");
          return a.exec();
      }
    3. 完成.



    三.记录有关qmake的编译项说明(来源:http://www.cnblogs.com/yuohoo/archive/2013/03/11/2954631.html):

    一、TEMPLATE变量:

      生成Makefile采用的模板。以下是可供选择的模板:

      app:建立一个应用程序Makefile,这个也是默认值,没有指定模板是默认是这个。

      lib:建立一个库的Makefile。

      vcapp:建立一个应用程序的visual studio项目文件。

      vclib:建立一个库的visual studio项目文件。

      subdirs:创建一个能够进入子目录并且为之生成为它调用make的Makefile。需要在后面用SUBDIRS=XX来指定那些子目录。

    1、app模板:

      app模板告诉qmake为建立一个应用程序生成一个Makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。

      HEADERS:需要包含的头文件的列表。

      SOURCES:需要的源文件的列表。

      FORMS:需要的.ui文件的列表。

      LEXSOURCES:所有lex源文件的列表。

      YACCSOURCES:所有yacc源文件的列表。

      TARGET:可执行应用程序的名称。默认值为项目文件的名字。

      DESTDIR:放置可执行程序目标的目录。

      OBJECTS_DIR:放置obj中间文件的目录。

      MOC_DIR: moc转换文件路径。

      RCC_DIR: 资源文件路径。

      UI_DIR:ui文件转换的路径。

      RESOURCES:需要包含的资源文件。

      LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。

      LIBEXT: 产生lib的后缀。

      DEFINES:应用程序所需的额外的宏定义列表。

      INCLUDEPATH:应用程序所需的额外的包含路径列表。

      DEPENDPATH:应用程序所依赖的搜索路径。

      VPATH:寻找补充文件的搜索路径。

      DEF_FILE:只有Windows需要:应用程序所要连接的.def文件。

      RC_FILE:只有Windows需要:应用程序的资源文件。

      RES_FILE:只有Windows需要:应用程序所要连接的资源文件。

      TRANSLATIONS: 多国语言支持文件。

      INSTALLS: 要安装的文件。

      target.path: 安装的路径。

      详细请参考Qt帮助条目:qmake Variable Reference。

    2、lib模板:

      lib模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了“app”模板中提到系统变量,还有一个VERSION是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。

      VERSION:目标库的版本号,例如:1.2.3。

    3、subdirs模板:

      subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。这个模板只有一个系统变量SUBDIRS可以被识别。

      SUBDIRS:这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。例如,如果子目里是“subapp”,那么在这个目录中的项目文件应该被叫做subapp.pro。

    二、CONFIG变量:

      配置变量,指定了编译器所要使用的选项和所需要链接的库。

    1、控制编译器标志的选项:

      release:应用程序将以release模式连编,如果“debug”被指定,它将被忽略。

      debug:应用程序将以debug模式连编。

      warn_on:编译器会输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略。

      warn_off:编译器会输出尽可能少的警告信息。

    2、控制需要连接的库的选项:

      qt:应用程序是一个Qt应用程序,并且Qt库将会被链接。

      thread:应用程序是一个多线程程序。

      x11:应用程序是一个x11应用程序或者库。

      windows:只用于app模板,应用程序是一个windows下的窗口应用程序。

      console:只用于app模板,应用程序是一个windows下的控制台应用程序。

      dll:只用于lib模板,库是一个共享库。

      staticlib:只用于lib模板,库是一个静态库。

      plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。

      例如:CONFIG += qt debug,使用qt库的应用程序,debug版本。

    3、注意事项:必须使用“+=”,不要使用“=”,否则原来的设置会被清除。

    三、变量用法:

    1、自定义变量:

      MY_VARIABLE = value

      定义了一个变量MY_VARIABLE,并将值设置为value。

    2、变量值的传递:

      可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:

      MY_DEFINES = $$DEFINES  

      现在MY_DEFINES变量包含了项目文件在这点时DEFINES变量的值。这也和下面的语句一样:

      MY_DEFINES = $${DEFINES}



    • 环境:UBuntu14.04 LTS
    • 来源:http://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application

      

    祝:玩得愉快!
  • 相关阅读:
    hdu 1254 推箱子(双重bfs)
    hdu 1495 非常可乐 (广搜)
    [leetcode-687-Longest Univalue Path]
    [leetcode-686-Repeated String Match]
    POJ 2287 田忌赛马 贪心算法
    [leetcode-304-Range Sum Query 2D
    [leetcode-682-Baseball Game]
    [leetcode-299-Bulls and Cows]
    [leetcode-319-Bulb Switcher]
    [leetcode-680-Valid Palindrome II]
  • 原文地址:https://www.cnblogs.com/hejianglin/p/5245484.html
Copyright © 2011-2022 走看看