Qt不承认其他子项目

时间:2016-01-08 13:53:50

标签: c++ macos qt qmake subdirs

我目前正在使用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
  • 我知道第一个错误来自使用g_something中的someclass1而没有正确关联Proj1Proj2,但我不知道如何告诉链接器我使用其他子项目

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果你想使用lib,你的proj1应该是app,而不是extern。 并且您的主项目应添加ordered