9

以前の質問がルールと依存関係について少し混乱していることに気付きました。次の .pro ファイルは、qmake の実行時に「生成された」ディレクトリにソース ファイルが存在する場合に正しく機能する makefile を生成します。

idl.target   = generated/qmtest.h
idl.commands = code_generator 
idl.config   = no_link
idl.depends  = $$SOURCES $$HEADERS $$FORMS

TEMPLATE       = app
INCLUDEPATH    += generated
SOURCES        += generated/*.cpp
PRE_TARGETDEPS += generated/qmtest.h
QMAKE_EXTRA_UNIX_TARGETS += idl

しかし、qmake を実行すると、makefile のみが生成され、PRE_TARGETDEPS と QMAKE_EXTRA_UNIX_TARGETS は役に立ちません。generated/ の内容を SOURCES に追加する makefile を qmake に生成させるにはどうすればよいですか?

4

3 に答える 3

5

私は今同じ問題を抱えていましたが、単一の生成されたファイルだけのより単純なユースケースのためです。そのために、SOURCES の代わりに GENERATED_SOURCES を使用して、これを実現するためのはるかに簡単な方法を見つけました。

ダミーファイル.ターゲット=ダミー.cpp
dummyfile.commands = touch $$dummyfile.target
QMAKE_EXTRA_TARGETS += ダミーファイル
GENERATED_SOURCES += $$dummyfile.target

おそらく、それを qmake ループにプッシュして、複数のファイルに対して適切なターゲットを生成することもできます。

于 2012-08-08T12:25:40.257 に答える
5

これを 2 回のパスで行う必要がある場合があります。

qmake ファイルに、次の行を追加します。

include( generated/generated.pri )

次に、code_generator スクリプトの最後に、ソースを generated.pri ファイルに追加します (例では bash を使用していますが、考え方はほとんどすべての言語で同じです)。

rm generated/generated.pri
for file in $( ls generated/*.cpp ); do
    echo "SOURCES += ${file}" >> generated/generated.pri
done

qmake ファイルを初めて実行するとき、 generated/ generated.pri はおそらく空になります。make を実行すると、生成された .pri ファイルが作成されます。2 回目は、make ファイルを再作成し (ソース .pri ファイルが変更されたため)、再度コンパイルします。第 2 段階を実行する他のコマンドをいじることができる場合があります。

于 2010-01-06T18:32:49.193 に答える
0

私はqmake、GNU Makefile の生成に依存する、堅牢で一般的であると思われる解決策を考え出しました。

という名前のファイルにすべての追加SOURCESおよびHEADERS割り当てがあるとします。このファイルは、 で言及されているソースおよび/またはヘッダーも生成するMakefile.priスクリプトを実行することによって生成されます。generate_Makefile.pri.shMakefile.pri

このファイルは、ビルド システム自体によって自動的かつ確実に生成され、.proファイルに含まれるようになりqmake、その内容を考慮して、適切な依存関係を持つ Makefile を生成できるようになります。

.proこれは、ファイルに入れなければならないものです。

Makefile_pri.target   = Makefile.pri
Makefile_pri.commands = generate_Makefile.pri.sh
Makefile_pri.depends  = FORCE

Makefile.target  = $$MAKEFILE
Makefile.depends = Makefile_pri

include($$Makefile_pri.target)

QMAKE_EXTRA_TARGETS = Makefile Makefile_pri

こちらです:

  1. がない場合Makefile.priは作成されます。
  2. Makefile.priが作成または更新された場合は、qmake再度実行され、その内容が考慮され、Makefile

前述のように、これGNU Makefile の生成に依存しますqmakeが、同じアプローチを他のターゲット ビルド システムでも使用できると考えています。

于 2017-02-10T16:45:20.607 に答える