1

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

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

4

1 回答 1

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

这样,您就有了一个源外构建树 (in build/),这样您的二进制文件就不会与源文件混淆。

lib/和目录很方便,include/因为您可以随后定义install构建目标。如果你然后输入

 make install

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

于 2013-06-07T14:04:39.383 回答