gpt4 book ai didi

c++ - 将调用类转换为库本身后,库头文件中没有此类文件

转载 作者:行者123 更新时间:2023-12-03 12:51:50 25 4
gpt4 key购买 nike

我有一个项目,其中 ClientLauncher 是执行子目录。我还有两个库 GUI 和 Metrics。

最初,ClientLauncher 和 GUI 是“一个”,并且使用了 Metrics 库,一切都很好。但现在,在 GUI 包含 Metrics 内容的每个地方编译程序时,我都会得到 "filename.h": No such file or directory

我更改此设置的原因是因为我希望能够在另一个库 UnitTests 中测试我的所有代码。因此,我希望将所有内容都放在一个库中,以便 UnitTests 可以使用该代码。

所以GUI现在是一个库,但它曾经是程序的开始。为了将其转换为库,我将 TEMPLATE = lib 添加到 .pro 中,如下所示。

ClientLauncher“启动”GUI。它只有 main.cpp 并包含“mainwindow.h”,它是 GUI 库中的头文件。

ClientLauncher/main.cpp

#include "mainwindow.h"

int main(int argc, char *argv[]) {
return 0; //Actual code doesn't cause error
}

GUI/mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "metricslib.h" //ERROR: metricslib.h: No such file or directory

#endif

指标/metricslib.h

#ifndef METRICSLIB_H
#define METRICSLIB_H

//Nothing that causes error

#endif

我使用子目录项目作为根:

TEMPLATE = subdirs

QT += widgets

CONFIG += qt

SUBDIRS += \
ClientLauncher \
Metrics \
GUI

ClientLauncher.depends = GUI
GUI.depends = Metrics

ClientLauncher.pro

QT += core gui charts network sql widgets

CONFIG += c++11 console gui c++14
CONFIG -= app_bundle

SOURCES += \
main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

unix|win32: LIBS += -L$$OUT_PWD/../GUI/ -lGUI

INCLUDEPATH += $$PWD/../GUI
DEPENDPATH += $$PWD/../GUI

GUI.pro

QT += core gui charts network sql widgets

TEMPLATE = lib

#DEFINES += GUI_LIBRARY

CONFIG += c++11 gui c++14

# Set icon
RC_ICONS = icon.ico

SOURCES += \
mainwindow.cpp \

HEADERS += \
mainwindow.h \

FORMS += \
mainwindow.ui \

RESOURCES += \
resources.qrc

## Metrics dependency ##
unix|win32: LIBS += -L$$OUT_PWD/../Metrics/ -lMetrics

INCLUDEPATH += $$PWD/../Metrics
DEPENDPATH += $$PWD/../Metrics

win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../Metrics/Metrics.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../Metrics/libMetrics.a

Metrics.pro

QT -= gui

TEMPLATE = lib

CONFIG += c++11 gui staticlib

HEADERS += \
metricslib.h

最佳答案

我不确定我读得是否正确,我有点累,但如果我是对的,这就是一个简单的修复。

因此,当将现有文件包含到您的项目中时,您会将其包含在您的项目中,但是...这不是您包含它的方式,您可以通过文件路径包含头文件,例如,假设主文件是 desktop/project/main.cpp ,一个 header 是 desktop/project/GUI/header.h ,另一个 header 是 desktop/header2.h 这里是你如何得到从 main.cpp 给他们,

   #include <GUI/header.h>

#include <../header2.h>

我知道这是一个粗鲁的例子,但我希望它能帮助你度过美好的一天!

关于c++ - 将调用类转换为库本身后,库头文件中没有此类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61916529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com