我在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();
}
答案 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_IMPORT
。 BIOSPATCHER_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