2

所以,我正在尝试学习 CppUnit 测试。由于 CppUnit 需要它自己的main函数来运行测试,我想我会将我的测试套件移动到它自己的子项目中。如果整个哲学是错误的,请纠正我。然后我将把它推送到我的 Git 服务器并尝试在 Gerrit 触发器上在 Jenkins 中运行测试。最终,我正在尝试学习 Jenkins,我正在创建一个简单的项目来帮助我。但是,当我编译时,我遇到了很多与文件相关的问题,JenkinsTestSuite无法在JenkinsTestMain. 例如...

persontest.cpp:5:20: error: person.h: No such file or directory
In file included from persontest.cpp:7:

我的(基本)目录结构是这样的......

JenkinsTest |-JenkinsTestMain |-JenkinsTestSuite

我的 JenkinsTest.pro 文件如下所示:

TEMPLATE = subdirs

SUBDIRS += \
    JenkinsTestSuite \
    JenkinsTestMain

CONFIG += ordered
SUBDIRS += JenkinsTestMain

我的 JenkinsTestMain.pro 文件如下所示:

!include(../common.pri) {
    error(Couldn't find the common.pri file!)
}

QT       += core

QT       -= gui

TARGET = JenkinsTest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    person.cpp

HEADERS += \
        person.h

我的 JenkinsTestSuite.pro 文件如下所示:

!include(../common.pri) {
    error(Couldn't find the common.pri file!)
}

QT       += core

QT       -= gui

TARGET = JenkinsTest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    persontest.cpp \

HEADERS += \
    persontest.h

我的 common.pri 文件如下所示:

INCLUDEPATH += . ..
WARNINGS += -Wall

TEMPLATE = lib

UI_DIR = .uics
MOC_DIR = .mocs
OBJECTS_DIR = .objs
4

2 回答 2

0

JenkinsTestMain/ 不在 INCLUDEPATH 中,因此未找到 person.h。

在 JenkinsTestSuite.pro 中,您必须添加

INCLUDEPATH += ../JenkinsTestMain

或者,在测试中使用#include。

我还建议为每个 INCLUDEPATH += 添加一个 DEPENDPATH +=,否则对 person.h 的更改不会触发 persontest.cpp 被重新编译,这会导致错误的行为和崩溃。

这里的另一个问题是 person.cpp 不是 JenkinsTest 的一部分。您必须为 JenkinsTest 再次编译 person.cpp,或者将该代码放入共享库中。

于 2012-09-22T09:12:26.613 回答
0

OP 可能不是这种情况,但由于不同的原因,我遇到了同样的问题。

如果您的项目本身编译良好,但在构建为子项目时失败,则可能是由于另一个项目使用它并且在包含文件夹中丢失了某些内容。例如:如果项目 A 使用项目 B,而项目 B 依赖于文件 X,您可能会收到错误消息,指出项目 B 找不到文件 X,因为项目 A 的包含路径中没有它。(即使项目 B 包含它就好了)

在 qmake 中将依赖项添加到项目 A 的包含路径为我解决了这个问题。

于 2018-01-29T17:07:08.517 回答