0

PyQt5 バインディングの作成を qmake ビルド プロセスに統合しようとしています。SIP ファイルの準備ができており、そのためのコンパイラをセットアップしました。

SIP_FILES += global/sip/Sy_version.sip

sipSourceBuilder.input = SIP_FILES
sipSourceBuilder.output_function = sipSourceHandler
sipSourceBuilder.variable_out = SOURCES
sipSourceBuilder.dependency_type = TYPE_C
sipSourceBuilder.CONFIG += target_predeps
sipSourceBuilder.commands = $$PYTHON $${PWD}/sipConfigure.py \
                                       $$QT_SIP_PATH \
                                       $${_PRO_FILE_PWD_} \
                                       $${_PRO_FILE_PWD_}/${QMAKE_FILE_IN}

QMAKE_CLEAN += $${_PRO_FILE_PWD_}/sipOutput/sip${QMAKE_TARGET}cmodule.cpp
SOURCES += $${_PRO_FILE_PWD_}/sipOutput/sip${QMAKE_TARGET}cmodule.cpp

QMAKE_EXTRA_COMPILERS += sipSourceBuilder

defineReplace機能sipSourceHandlerは正常に動作しています。ビルドを開始すると、sipConfigure.pyスクリプトが実行されず、エラーが発生します。

make: *ターゲット ../../Syren2/core/sipOutput/sipcoreSy_version.cpp', needed by /home/cmannett85/Programs/Syren2/libs/libcore.so.1.0.0' を作成するルールはありません。止まる。

スクリプトが実行されなかった場合、これは理にかなっていますが、なぜ実行されなかったのでしょうか? Makefile は、ルールがあることを示しています。

/home/cmannett85/workspace/Syren2/source/Syren2/core/sipOutput/sip${QMAKE_TARGET}Sy_version.cpp: ../../Syren2/core/global/Sy_version.h \
        /home/cmannett85/Qt/5.3/gcc_64/include/QtCore/QtGlobal \
        // ...Lots of includes....
        ../../Syren2/core/global/sip/Sy_version.sip
    python3 /home/cmannett85/workspace/Syren2/source/Syren2/sipConfigure.py /usr/share/sip/PyQt5 /home/cmannett85/workspace/Syren2/source/Syren2/core /home/cmannett85/workspace/Syren2/source/Syren2/core/../../Syren2/core/global/sip/Sy_version.sip

(巨大な横スクロールでごめんなさい)。 ${QMAKE_TARGET}coreあり、Makefile で変数として宣言されています。sipSourceBuilder.commandsをランダムにバッシュされた文字に設定しようとしましたが、ビルド中に何も文句を言わなかったので、makeを使用しようとさえしていないようsipSourceBuilderです。理由について何か提案はありますか?

また、SIP コンパイラは、qmake に認識させる必要があるヘッダー ファイルも生成することを知っていますが、この手順を実行しようとしている間、そのコードをコメントアウトしました。

4

1 に答える 1

0

この問題は、ターゲット/依存関係がパスであるかどうかを検出して関連する変換を行うのではなく、文字列マッチングを使用して依存関係をターゲットにリンクするために発生していました。私の場合、生成されたソース ファイルのライブラリ依存関係は相対パス ( ../../Syren2/core/sipOutput/sipcoreSy_version.cpp) としてリストされていましたが、関連するターゲットは絶対パス ( /home/cmannett85/workspace/Syren2/source/Syren2/core/sipOutput/sip${QMAKE_TARGET}Sy_version.cpp) としてリストされていたためです。

sipSourceHandler解決策は、出力ファイル名ジェネレーターを変更して、Makefile の場所からの相対パスを返すことでした。

// SIP_SOURCE_ABS was previously returned, now SIP_SOURCE is.
SIP_SOURCE_ABS = $${_PRO_FILE_PWD_}/sipOutput/sip${QMAKE_TARGET}$${NO_PREFIX}.cpp
SIP_SOURCE = $$relative_path( $$SIP_SOURCE_ABS, $${OUT_PWD} )
于 2014-06-25T12:40:18.070 に答える