c++ - Qt 不识别其他子项目

标签 c++ macos qt qmake subdirectory

我目前正在 MacOS 上使用 QT-Creator,目前我有点卡在 2 个点上。我有一个主项目和两个子项目。到目前为止,一切正常。

主项目的 .pro 文件如下所示:

//...
TEMPLATE = subdirs
SUBDIRS += Proj1
SUBDIRS += Proj2

Proj1.pro 文件如下所示:

TARGET = Proj1
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += someclass1.cpp
HEADERS += someclass1.h

除了 SOURCES 和 HEADERS 部分外,Proj2.pro 看起来很相似:

//...
SOURCES += someclass2.cpp main.cpp
HEADERS += someclass2.h

现在进入有趣的部分:

我的 someclass1.cpp 包含一个全局变量,如下所示:

#include "someclass1.h"
int g_something = 18;
SomeClass1::SomeClass1() {}

我的 someclass2.cpp 尝试通过关键字 extern 访问该全局变量:

#include "someclass2.h"
#include "../Proj1/someclass1.h"
#include <stdio.h>
extern int g_something;
SomeClass2::SomeClass2() {
    printf("g_something: %d\n", g_something);
}

当我尝试编译时收到 2 个错误:

Undefined symbols for architecture x86_64:
    "_g_something", referenced from:
        SomeClass2::SomeClass2() in someclass2.o ...

Undefined symbols for architecture x86_64:
    "_main", referenced from:
        start in crt1.10.6.o

  • 我知道第一个错误是由于使用 someclass1 中的 g_something 而没有将 Proj1 正确链接到 Proj2我不知道如何告诉链接器我使用了另一个子项目

  • 我猜第二个错误是因为我没有在项目 Proj1 中定义主方法,但我不知道该怎么做,所以没有预期的主方法!

最佳答案

如果我的理解正确,您尝试编译两个独立的应用程序 Proj1 和 Proj2。他们之间没有任何联系。它们都应该有 main(...) 函数。当然,在那种情况下你不能声明 extern var。如果你想创建一个应用程序,那么你的一个子项目应该是一个库,其他子项目应该与它链接。然后你可以使用外部声明。

Proj2.pro 声明 TEMPLATE = lib。在 Proj1 添加与此库的链接,如 LIBS += -lProj2。当然,您应该将路径添加到 libproj2 位置。

关于c++ - Qt 不识别其他子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678714/

相关文章:

c++ - 使用 SHGetPathFromIDList 将 PIDL 转换为文件路径

python - SCons 构建多个环境

C++ 宏代码 - 将(任意大小的)显式整数转换为指针类型

objective-c - libgcrypt 的 Xcode 错误

ruby-on-rails - 安装 Ruby 2.2.6 时 macOS Sierra 的 RVM 问题

swift - 如何从子窗口连接文本字段?

c++ - QVector 预分配访问线程安全

c++ - 发送大数据时增强数据包之间丢失的asio tcp数据

c++ - 具有类似 FileSystemModel 功能的 TreeView?

c++ - OpenCV 与 Qt 集成