Qt 不识别其他子项目
Qt doesn't recognize other sub-projects
我目前正在 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。他们之间没有任何 link 年龄。他们都应该有 main(...)
功能。当然,在这种情况下你不能声明 extern
var 。如果你想创建一个应用程序,那么你的一个子项目应该是一个库,而其他子项目应该 link 。然后你可以使用外部声明。
在Proj2.pro
声明TEMPLATE = lib
。并在 Proj1 添加 linkage 与此库类似 LIBS += -lProj2
。当然你应该添加到 libproj2
位置的路径。
如果您想使用 extern
,您的 proj1 应该是 lib
,而不是 app
。
并且您的主要项目应该添加 ordered
我目前正在 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。他们之间没有任何 link 年龄。他们都应该有 main(...)
功能。当然,在这种情况下你不能声明 extern
var 。如果你想创建一个应用程序,那么你的一个子项目应该是一个库,而其他子项目应该 link 。然后你可以使用外部声明。
在Proj2.pro
声明TEMPLATE = lib
。并在 Proj1 添加 linkage 与此库类似 LIBS += -lProj2
。当然你应该添加到 libproj2
位置的路径。
如果您想使用 extern
,您的 proj1 应该是 lib
,而不是 app
。
并且您的主要项目应该添加 ordered