如何从另一个项目导入项目头文件,并将其用作qtcreator项目的库

时间:2016-06-12 15:28:56

标签: c++ include project qt-creator

我在qtcreator中有两个项目:BiosPatcher - 代码& BiosPatcherTest - 针对BiosPatcher代码的googletest单元测试。来自这里的建议:

multiple main declaration in qtcreator project which uses googletest

如何从另一个项目中导入源代码并将构建项目作为qtcreator中的库连接到另一个qtcreator项目?

BiosPatcher项目有:

BiosPatcher\src\bios\Bios.{cpp, hpp} class

在BiosPatcherTest中我有测试:

#include "src/bios/Bios.hpp" //not works
...
TEST(BiosTest, testReadMethodReadsFromBiosIO) {
MockBiosIO mockBiosIO;
EXPECT_CALL(mockBiosIO, readAsBytes())
    .Times(AtLeast(1));

MockReentrantLock mockReentrantLock;
MockBiosVector mockBiosVector;
MockPatch mockPatch;
MockLog mockLog;

Bios bios;
bios.setBiosIO(&mockBiosIO);
bios.setLock(&mockReentrantLock);
bios.setBiosBytesVector(&mockBiosVector);
bios.setLog(&mockLog);
bios.setPatch(&mockPatch);

bios.read();

}

1 个答案:

答案 0 :(得分:0)

首先,您需要创建BiosPatcher C ++共享库项目。 之后,您只需要将BIOSPATCHER_LIBRARY添加到类声明

class BiosPatcher
{

需要替换为

class BIOSPATCHERSHARED_EXPORT BiosPatcher
{

之后,只需编译您的库并在第二个项目中包含相同的标题,然后添加到链接生成的.lib文件中。

DEPENDPATH''= . ../BiosPatcher
INCLUDEPATH ''= ../BiosPatcher
LIBS''= -L../BiosPatcher/debug -lBiosPatcher

当我在名为BiosPatcher的Qt Creator中创建库项目时,IDE会自动创建biospatcher_global.h文件,其中包含BIOSPATCHERSHARED_EXPORT定义。该文件需要包含在所有库头中。 您会看到,如果定义BIOSPATCHER_LIBRARY,则BIOSPATCHERSHARED_EXPORT将被定义为Q_DECL_EXPORT,否则为Q_DECL_IMPORTBIOSPATCHER_LIBRARY在库.pro文件中定义,这意味着如果您从其他项目中包含这些标题,则将从已编译的库中导入类。

#ifndef BIOSPATCHER_GLOBAL_H
#define BIOSPATCHER_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(BIOSPATCHER_LIBRARY)
#  define BIOSPATCHERSHARED_EXPORT Q_DECL_EXPORT
#else
#  define BIOSPATCHERSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // BIOSPATCHER_GLOBAL_H

另请阅读:https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application