如何配置qmake将* .obj保存在子目录中?

时间:2018-09-29 12:40:19

标签: c++ qt qmake

我的构建配置有问题。我收到'LNK2019'错误:

  

main.obj:-1:错误:LNK2019:未解析的外部符号“公共:__cdecl参考:: Item :: Item(void)”(?? 0Item @ Object @@ QEAA @ XZ)在函数main中引用

我的项目的文件系统结构如下(World.pro):

SOURCES += \
        main.cpp \
        Window.cpp \
    Item.cpp \
    Object/Item.cpp \
    Reference/Item.cpp

HEADERS += \
        Window.h \
    Item.h \
    Object/Item.h \
    Reference/Item.h

我知道问题出在哪里。当前,编译器将输出文件保存在一个主目录中,因此将有3个同名文件(当前已被覆盖?),这就是链接器找不到正确文件的原因。 如何要求编译器将* .obj保存在适当的子目录“对象”,“引用”中,并通知链接器在哪里搜索此文件?

我不希望将单独的项目与子项目(库)分开。我对当前的文件系统结构感到满意。同样,命名转换对我来说是完美的,我喜欢用Object::ItemReference::Item来引用类型。

1 个答案:

答案 0 :(得分:0)

不确定您可以调整qmake生成系统,因为在此处阅读文档http://doc.qt.io/qt-5/qmake-variable-reference.html#objects-dir时,似乎没有可能为每个源目录定义特定的文件夹。

对我来说,在同一个项目中使用相同名称的文件是一种不好的做法。这只会导致混乱。

我好像您在混淆文件名和名称空间:

您可以很好地使用不同的文件名(Reference / ReferenceItem.h)获得相同的结果,因为您在C ++中命名类的方式与文件名无关,这只是一个约定(将Foobar类放在一个文件Foobar.h / .cpp)

=>如果两个类不在相同的名称空间中,则可以使用两个相同的名称。文件名对此没有影响。

  

Reference / ReferenceItem.h文件

namespace reference {
  class Item {
   //implementation here...
  }
}
  

Object / ObjectItem.h

namespace object {
  class Item {
   //implementation here...
  }
}