4

.qrc ファイルで参照されているファイルの内容が変更されたときに、qresource ファイルをビルドするように CMake をセットアップしたいと考えています。たとえば、qrc ファイルにパッケージ化された qml ファイルがいくつかあり、qml ファイルが変更された場合は qrc を再コンパイルする必要があります。

リソース コンパイラを実行する次のマクロがありますが、リソース ファイル自体が変更された場合にのみ再構築されます。

MACRO(PYQT5_WRAP_RC outfiles)
  FOREACH(it ${ARGN})
    GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
    GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
    SET(outfile ${CMAKE_CURRENT_SOURCE_DIR}/${outfile}_rc.py)
    ADD_CUSTOM_TARGET(${it} ALL
      DEPENDS ${outfile}
    )
    ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
      COMMAND ${PYRCC5BINARY} ${infile} -o ${outfile}
      MAIN_DEPENDENCY ${infile}
    )
    SET(${outfiles} ${${outfiles}} ${outfile})
  ENDFOREACH(it)
ENDMACRO (PYQT5_WRAP_RC)

マクロは次のように使用されます。

PYQT5_WRAP_RC(rc_gen file1.qrc file2.qrc ...)

qrcファイルが参照するファイルの1つが変更された場合、qrcファイルが再コンパイルされるようにするにはどうすればよいですか?

このような複雑なことをする必要がありますか?

4

2 に答える 2

0

私があなたの状況を正しく理解している場合、問題は、CMake が qrc ファイルが何であるかについて何も認識しておらず、qrc ファイルが他のファイルを参照していることを認識していないことです。この依存関係は、CMake では暗黙的です (C++ インクルードと比較してください。ただし、これらの cmake には、依存関係を検出する特別なメカニズムがあります)。

したがって、私が理解しているように、できることは(常にadd_custom_target実行されます)を使用することですが、qrcファイルを依存関係に追加するだけでなく、qrcで参照されているファイルも最新であることを確認するスクリプトを作成することもできます。そうでない場合は、qrc ファイルをタッチします)。

もちろん、上記で参照した他の回答のメソッドを使用して qrc ファイルにアクセスできますが、qrc ファイルで参照されているファイルのパスを抽出するには、独自のスクリプトを開発する必要があります。次に、CMake スクリプト機能を使用して、それらが最新であるかどうかを確認し、qrc ファイルに触れることができます。

于 2014-02-10T07:18:41.530 に答える