マクロを変更するときにqmakeが常にプロジェクトを最初から再構築する方法

突然誰かが知らない場合、私は急いでqmakeが知らないことを知らせます。 プロジェクトのマクロを変更した後に完全な再構築を行うのを忘れると、この悲しい事実が非常に不快なビルドバグにつながる可能性があります。



この問題を解決するために、次のスクリプトを自分用に作成しました。これは、自分の機能に最も便利に配置されています。 ここで何が起こっているのか詳細に説明することはできません;巻は厚い本ではなく本です。 誰も気にしない- 私のブログへようこそ、私は私の知っているqmakeについてのすべてを書きました。



# ,      defineReplace(checkDefinesForChanges) { old_def = $$cat($$OUT_PWD/defines.txt) curr_def = $$DEFINES curr_def -= $$old_def old_def -= $$DEFINES diff = $$old_def $$curr_def #   ,      OUT_PWD !isEmpty(diff) { A = $$system(del /F /Q /S $$system_path($${OUT_PWD}/*.*)) message(DEFINES WERE CHANGED) } write_file($$OUT_PWD/defines.txt, DEFINES); return(???) } #  QMAKE_EXTRA_COMPILERS,   # checkDefinesForChanges    _defines_check_ = ??? defines_check.name = check on defines being changed defines_check.input = _defines_check_ defines_check.CONFIG += no_link ignore_no_exist defines_check.depends = ??? defines_check.commands = ??? defines_check.output_function = checkDefinesForChanges QMAKE_EXTRA_COMPILERS += defines_check #   Makefile,    defines.txt  qmake recompile_on_defines_txt_not_existsing.target = $(MAKEFILE) recompile_on_defines_txt_not_existsing.depends = $$OUT_PWD/defines.txt recompile_on_defines_txt_not_existsing2.target = $$OUT_PWD/defines.txt recompile_on_defines_txt_not_existsing2.depends = qmake QMAKE_EXTRA_TARGETS += recompile_on_defines_txt_not_existsing recompile_on_defines_txt_not_existsing2
      
      





何が起こっているかの本質:すべての機能を処理した後、QMAKE_EXTRA_COMPILERSを曲げて関数を呼び出します。 したがって、DEFINES変数の最終値を取得できます。これを使用して、マクロの変更の事実を判断します。 変更があった場合は、OUT_PWDのすべてのファイルを削除します(Windowsのコマンド、LinuxのLinuxのファイルを変更します)。



時々役立つボーナスとして、defines.txtファイルでプロジェクトがコンパイルされたマクロを常に見ることができます。



All Articles