7

Qtプロジェクトを(Qt Creatorを使用して)ある程度整理するために、1つの.proファイルと複数の.priファイルを用意しました。つい最近、別の.priファイルにすでに存在するクラスと同じファイル名を持つクラスを.priファイルの1つに追加しました。

qmakeによって生成されたファイル構造とmakefileは、その後のファイル名の衝突を認識していないように見えます。生成されたmoc_*ファイルはすべて同じサブディレクトリ(releaseまたはdebugのいずれか)にスローされ、一方が他方を上書きすることになります。プロジェクトを作成しようとすると、次のような警告がいくつか表示されます。

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

subdir1.priの内容:

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

subdir2.priの内容:

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

moc_ *ファイルを別々の.priファイルから別々のサブディレクトリに配置するシステムを生成するようにqmakeに指示する方法はありますか?

4

3 に答える 3

4

subdir1.priに追加してみてください

MOC_DIR = "subdir1/MOCFiles"

subdir2.priに

MOC_DIR = "subdir2/MOCFiles"

テストされていません。ぜひチェックしてください。それがうまくいくことを願っています。

編集1:MOCFilesは、mocファイルを入れるための目的のフォルダーです。

編集2:質問で具体的に尋ねられたので、MOCファイルディレクトリで言及するのをやめました。ただし、さらに、各priファイルに以下を追加する必要がある場合もあります。(* .priファイルごとにフォルダーが異なることを確認してください)

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

同じファイル名を使用することで、複数のpriファイルを衝突させることなく機能できると思います。あなたは答えを受け入れたので(それは不可能であると述べています)、上記の変更を加えて試してみてください。それが機能していないかどうかを知らせてください。

于 2010-06-03T05:48:20.547 に答える
3

最善の方法は、すべてのファイルに一意の名前が付いていることを確認することです。qmake以外にも、自分がやっていることをやろうとすると壊れてしまうツールがあります。また、自分自身を混乱させる可能性もあります(たとえば、何がより難しいかを理解すること#include "file.h"はより困難です)。

于 2010-06-02T22:46:50.500 に答える
0

私は以前にこれを試しました。簡単な答えは、どういうわけかそれらに別の名前を付けることです。もう1つの答えは、各サブディレクトリを独自の.proファイルを持つ個別のライブラリとして扱い、subdirsタイプを使用してすべてのライブラリディレクトリをコンパイルすることです。

完全な答えを本当に調査したい場合は、mocに使用するツールを指定できます。この状況では、2つの異なるファイルにわずかに異なる名前が使用されるように、名前を変更できる場合があります。ただし、コンパイルとリンクするファイルのリストに、異なる名前の各ファイルが追加されていることと、元の名前のmocファイルが追加されていないこと(ビルドが失敗すること)を確認する必要もあります。

于 2010-06-03T17:29:43.933 に答える