我正在Ubuntu 13.04上使用Qt Creator 2.7.0。

我最近遇到了使用库的想法,对我来说,它们是一个全新的事物。
我刚发现我需要在应用程序的.pro文件中包含以下内容,才能使用自己的库:

LIBS += -L<lib's dir> -l<lib's name>
INCLUDEPATH += <headers' dir>

// for example:
LIBS += -L$$PWD/../MyLib/release/ -lMyLib
INCLUDEPATH += $$PWD/../MyLib/src/

如您所见,我所有的项目都放在一个名为Programming的文件夹中(本例中为..)
我的每个项目的根目录中都有.pro.pro.user文件,子文件夹/src中的源文件,而另一个子文件夹/release中的发行版。

因此,这是我的Programming文件夹的样子:
Programming
   MyLib
      MyLib.pro
      MyLib.pro.user
      src
         myclass.h
         myclass.cpp
      release
         libMyLib.a
         Makefile
         myclass.o
   MyApp
      MyApp.pro
      MyApp.pro.user
      src
         main.cpp
      release
         main.o
         Makefile
         MyApp

但是,我认为可以创建一个文件夹Programming/libs/,并在该libMyLib.a文件夹内添加myclass.hlibs文件。
我将对所有库执行相同的操作,然后可以始终将它们包括如下:
LIBS += -L$$PWD/../lib/ -lMyLib
INCLUDEPATH += $$PWD/../lib/

问题是,我将获得计算机上存储的每个库的包含路径,并且libs文件夹会变得一团糟,尤其是如果在不同的库中有两个具有相同名称的 header 时。

我真的是使用库的新手,是否有一个通用的解决方案来确定如何将它们放置在您的计算机上以及如何将它们包含到您的项目中?

最佳答案

您可以模仿诸如Boost之类的库,并具有如下目录树:

MyLib
    build
        Makefile, .pro or .sln file here
    lib
        MyLib
           // your .so / .a here
    include
        MyLib
           // your .h here
    src
           // your .cpp here
    CMake or qmake file here

这样,您将拥有一个源外构建树(在build/中),以便二进制文件不会与源文件混淆。
lib/include/目录非常方便,因为您可以随后定义install构建目标。如果输入
 make install

它将所有内容复制到usr/local/libuser/local/include,以便您的应用程序可以简单地执行#include <MyLib/some_header.h>,并且您可以直接链接到库二进制文件(因为您将所有内容都复制到了系统范围路径中的某个位置)。也没有名称冲突的危险,因为您将其包装在自己的MyLib子目录中。

关于c++ - 如何维护自制库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16985800/

10-11 22:35
查看更多