如何维护自制的图书馆?

时间:2013-06-07 13:51:38

标签: c++ static-libraries qt-creator include-path

我在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文件夹会变得一团糟,特别是如果在不同的库中有两个具有相同名称的标头。

我对使用库真的很陌生,是否有关于如何在计算机上找到它们的一般解决方案,以及如何将它们包含在您的项目中?

1 个答案:

答案 0 :(得分:2)

你可以模仿像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子目录中。