2

私たちのプロジェクトでは、MACRO が定義されている場合、いくつかのソース ファイルとヘッダー ファイルを追加しました。これを .pro ファイルで次のように行います。

contains(DEFINES, MY_DEF) {
message("Support MY_DEF")
INCLUDEPATH += \
    my_include_dir
SOURCES += \
    source1.cpp \
    source2.cpp
HEADERS +=  \
    my_include_dir/header1.h \
    my_include_dir/header2.h
FORMS +=  \
    myform.ui
}

これは、ビルド中に正常に機能します。MY_DEF が定義されていない場合、ファイルはコンパイルされません。MY_DEF は次のように定義されています。

DEFINES += MY_DEF

興味深いことに、MY_DEF が定義されているかどうかに関係なく、Qt Creator は常にプロジェクト ツリーにファイルを表示します。定義されていない場合、ビルドには使用されませんが、表示および編集可能であり、検索でスキャンできます... Qt Creator のバグですか?

ファイルがプロジェクトの一部であるかどうかは明確にわからないため、これは大きな問題ではありません。

4

4 に答える 4

2

意図的ですらある。プロジェクト ツリーに表示するために、.pro ファイル (基本的には「翻訳可能な文字列」を収集するために使用されるものと同じ) で言及されているすべてのファイルを収集するための特別な「蓄積」解析モードがあります。それ以外の場合、「プロジェクト内のすべてのファイルを置き換える」などは、プラットフォームまたは実行されているコンテキストに応じて異なる結果をもたらします。[含まれているのはqmakeの半分ではありませんが、すべてに近い...]

于 2012-08-04T12:18:26.293 に答える
0

QMake の条件付きインクルードに加えて、そのような条件付きソース コードの周りに #ifdef を追加します。そうすれば、条件が満たされない場合、視覚的にコンパイルから除外されることもわかります。ファイルがプロジェクト ツリーから完全に削除されるほど良くはありませんが、ファイルが適用されない場合に、編集時にビルドの一部であるかのように表示されるよりはましです。

于 2017-01-05T17:21:08.333 に答える
0

これは、QtCreator と .pro ファイルの読み取り方法に問題があるようです。実際にはファイルを完全に解析していないようで、代わりに特定のビットを選択するだけです。あるプラットフォームまたは別のプラットフォームにのみ含まれているファイルで同じ問題が発生しました-QtCreatorでは、それらは常に表示されます。

その理由は、ファイルリストを取得するためだけにqmakeの半分を再実装したくないか、またはそれを「正しく」解析しようとすると間違った答えが得られる状況があるためであると予想しています。ランダムに間違っているのではなく、予測可能に間違っているように選択されています。

于 2012-08-02T16:51:40.207 に答える