代码之家  ›  专栏  ›  技术社区  ›  Stephen

使用多个.pri文件的qt moc文件名冲突

  •  7
  • Stephen  · 技术社区  · 15 年前

    为了使我的qt项目保持一定的组织性(使用qt creator),我有一个.pro文件和多个.pri文件。最近,我在我的一个.pri文件中添加了一个类,该类与单独的.pri文件中已经存在的类具有相同的文件名。

    qmake生成的文件结构和makefile似乎忽略了随后发生的文件名冲突。生成的moc_*文件都被抛出到同一个子目录中(取决于版本或调试),其中一个最终覆盖了另一个。当我尝试创建项目时,我会收到如下警告:

    Makefile.Release:318: warning: overriding commands for target `release/moc_file.cpp`
    

    而且这个项目没有联系。

    下面是我所说的一个简单的例子。

    目录结构:

    + project_dir
    | + subdir1
    | | - file.h
    | | - file.cpp
    | + subdir2
    | | - file.h
    | | - file.cpp
    | - main.cpp
    | - project.pro
    | - subdir1.pri
    | - subdir2.pri
    

    project.pro的内容:

    TARGET = project
    TEMPLATE = app
    include(subdir1.pri)
    include(subdir2.pri)
    SOURCES += main.cpp
    

    子目录1.pri的内容:

    HEADERS += subdir1/file.h
    SOURCES += subdir1/file.cpp
    

    子目录2.pri的内容:

    HEADERS += subdir2/file.h
    SOURCES += subdir2/file.cpp
    

    有没有办法告诉qmake生成一个系统,将moc_x文件从单独的.pri文件放到单独的子目录中?

    3 回复  |  直到 15 年前
        1
  •  3
  •   rohanpm    15 年前

    最好的做法是确保所有文件都具有唯一的名称。除了Qmake之外,还有其他的工具,当你试图做你正在做的事情时,这些工具也会被打破;你也有可能让你自己感到困惑(例如理解 #include "file.h" 这样做更困难)。

        2
  •  4
  •   liaK    15 年前

    亚DIL1.PRI 尝试追加

    MOC_DIR = "subdir1/MOCFiles"
    

    也为了 亚DR2.PRI

    MOC_DIR = "subdir2/MOCFiles"
    

    它没有经过测试。看看吧。希望它能奏效。

    编辑1:moc files是您希望moc文件进入的文件夹。

    编辑2:我刚刚停止提到MOC文件目录,因为这是在这个问题中特别提出的。但另外,您可能还需要将以下内容添加到每个PRI文件中。 (确保不同的*.pri文件的文件夹不同)

    RCC_DIR = "subdir1/RCCFiles"
    UI_DIR = "subdir1/UICFiles"
    OBJECTS_DIR = "subdir1/ObjFiles"
    

    我相信拥有多个PRI文件可以通过拥有相同的文件名而不发生冲突。既然你已经接受了一个答案(说明这是不可能的),那么做上面的更改并尝试一下。一定要知道它是否不工作。

        3
  •  0
  •   Caleb Huitt - cjhuitt    15 年前

    我以前试过这个。简短的答案是以不同的方式命名它们。另一个答案是将每个子目录视为一个单独的库,它有自己的.pro文件,并使用子目录类型编译所有库目录。

    如果您真的想调查完整的答案,您可以指定用于MOC的工具。在这种情况下,您可以管理名称,以便对两个不同的文件使用稍微不同的名称。但是,您还需要确保将每个不同命名的文件添加到要编译和链接的文件列表中,而最初命名的MOC文件不是(或者您的构建将失败)。