Qt无法在子项目中找到文件

时间:2012-09-22 02:09:03

标签: c++ qt cppunit

所以,我正在尝试学习CppUnit测试。由于CppUnit需要它自己的main函数来运行测试,我想我会将我的测试套件移动到它自己的子项目中。如果整个哲学都错了,请纠正我。然后我将把它推送到我的Git服务器并尝试在Gerkins触发器上使用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

2 个答案:

答案 0 :(得分:0)

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

在JenkinsTestSuite.pro中,您必须添加

INCLUDEPATH += ../JenkinsTestMain

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

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

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

答案 1 :(得分:0)

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

如果您的项目自行编译正常,但在构建为子项目时失败,则可能是由于另一个项目使用它而遗漏了include文件夹中的内容。例如:如果项目A使用项目B,而项目B依赖于文件X,则可能会收到错误,说项目B无法找到文件X,因为项目A在包含路径中没有它。 (即使项目B包含它也很好)

在项目A中添加依赖项包括qmake中的路径为我修复了问题。