Qt не может найти файлы в подпроекте

Итак, я пытаюсь научиться тестированию CppUnit. Так как CppUnit нуждается в своем собственном main Функция запуска тестов позволила мне переместить мой набор тестов в собственный подпроект. Если вся эта философия неверна, пожалуйста, поправьте меня. Затем я перенесу это на свой Git-сервер и попытаюсь запустить тесты в Jenkins по триггеру Gerrit. В конечном счете, я пытаюсь выучить Дженкинса и создаю простой проект, который поможет мне в этом. Тем не менее, когда я компилирую, я получаю много проблем, связанных с файлами в 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

Решение

JenkinsTestMain / не входит в INCLUDEPATH, поэтому person.h не найден.

В JenkinsTestSuite.pro необходимо добавить

INCLUDEPATH += ../JenkinsTestMain

В качестве альтернативы используйте #include в тесте.

Я также предлагаю добавить DEPENDPATH + = для каждого INCLUDEPATH + =, в противном случае изменения в person.h не приведут к перекомпиляции persontest.cpp, что приведет к неправильному поведению и сбоям.

Другая проблема заключается в том, что person.cpp не является частью JenkinsTest. Вы должны либо скомпилировать person.cpp в другой раз для JenkinsTest, либо поместить этот код в общую библиотеку.

0

Другие решения

Вероятно, это не относится к ОП, но у меня была та же проблема по другой причине.

Если ваш проект прекрасно компилируется сам по себе, но завершается неудачно при сборке в качестве подпроекта, это может быть связано с тем, что его использует другой проект и что-то отсутствует в папке include. Например: если Проект A использует Проект B, а Проект B зависит от файла X, вы можете получить ошибки, говорящие о том, что Проект B не может найти файл X, поскольку у Проекта A его нет в пути включения. (Даже при том, что Проект B включает это просто отлично)

Добавление зависимостей к пути включения в проекте A в qmake устранило проблему для меня.

0