0

友人と私は Qt Creator with Boost を使用してゲーム エンジンを構築しています。これまでのところ、エンジンは共有ライブラリになるという考えがあり、最終的に作成したいゲームに変わるテスト実行可能ファイルで実行できるという考えがあります。

問題は主にヘッダーファイルです。エンジンの最新のビルドがビルドされたらすぐに、または追加されたときにでも、Qt Creator がヘッダー ファイルを認識できる方法を見つけたいと思います。/usr/include最初は、エンジンがビルドされた後に Qt Creator でビルド ステップとして実行される Python のスクリプトは、ヘッダー ファイルをシステム ディレクトリ (たとえば、* nix システムで動作している場合) にコピーするだけだと考えていました。 IDE は、エンジンをテスト実行可能ファイルにリンクするときにヘッダー ファイルを認識し、完全な自動補完もサポートします。

もちろん、環境変数が使用されます。私は Linux で開発することを好みますが、友人は Windows を好むので、それぞれのプラットフォームの好みに関して開発を行うことに同意しました。

これは良い解決策のように思えますが、この Python スクリプトのアイデアはやり過ぎかもしれません。これを行うより良い方法はありますか?

アップデート

提案されたQmakeスクリプトから、このエラーが発生します。

cp -f "/home/amsterdam/Programming/atlas/Engine/AtlasEngine/"AtlasEngine_global.h "/" 
cp: cannot create regular file `/AtlasEngine_global.h': Permission denied
make: Leaving directory `/home/amsterdam/Programming/atlas/Engine/AtlasEngine__GCC__Linux__Debug'
make: *** [libAtlasEngine.so.1.0.0] Error 1
15:20:52: The process "/usr/bin/make" exited with code 2.
Error while building project AtlasEngine (target: Desktop)
When executing build step 'Make'

私の調整は次のようになります。

# Copy over build artifacts
SRCDIR = $$ATLAS_PROJ_ROOT
DESTDIR  = $$ATLAS_INCLUDE

# Look for header files there too
INCLUDEPATH += $$SRCDIR

# Dependencies: mylib. Only specify the libs you depend on.
# Leave out for building a shared library without dependencies.
#win32:LIBS += $$quote($$SRCDIR/mylib.dll)
# unix:LIBS += $$quote(-L$$SRCDIR) -lmylib

DDIR = \"$$SRCDIR/\" #<--DEFAULTS
SDIR = \"$$IN_PWD/\"

# Replace slashes in paths with backslashes for Windows

win32:file ~= s,/,\\,g
win32:DDIR ~= s,/,\\,g
win32:SDIR ~= s,/,\\,g

for(file, HEADERS) {
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t)
}
4

2 に答える 2

1

クロスプラットフォームで機能するQmakeマジックを使用して、これを克服することができました。現在のプロジェクトの次のレベルにあるディレクトリ内のディレクトリに、ヘッダー ファイルと共に共有ライブラリ (.dllまたはファイル)をコピーします。.sodll

これをファイルの最後に置き、.proそれに応じてパス/ライブラリを変更します。

# Copy over build artifacts
MYDLLDIR = $$IN_PWD/../dlls
DESTDIR = \"$$MYDLLDIR\"

# Look for header files there too
INCLUDEPATH += $$MYDLLDIR

# Dependencies: mylib. Only specify the libs you depend on.
# Leave out for building a shared library without dependencies.
win32:LIBS += $$quote($$MYDLLDIR/mylib.dll)
 unix:LIBS += $$quote(-L$$MYDLLDIR) -lmylib

DDIR = \"$$MYDLLDIR/\"
SDIR = \"$$IN_PWD/\"
# Replace slashes in paths with backslashes for Windows
win32:file ~= s,/,\\,g
win32:DDIR ~= s,/,\\,g
win32:SDIR ~= s,/,\\,g
for(file, HEADERS) {
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t)
}

次にLD_LIBRARY_PATH、プロジェクトの「実行設定」で、同じdllディレクトリを (相対的に) 指すように調整します。

はい、スペースとバックスラッシュを含むパスをエスケープするのは醜いですが、これはクロスプラットフォームでうまく機能することがわかりました。Windows (XP、7) および Linux でテスト済み。はい、プロジェクトを実行するために変更する環境設定が含まれていますが、少なくとも外部 (Python) スクリプトはもう必要ありません。また、ルート権限を必要とするシステム ディレクトリにインストールする必要もありません。

改善は大歓迎です。

于 2012-09-10T20:39:21.667 に答える
0

他の誰かがこれに問題を抱えているかどうかはわかりませんが、何らかの理由で Qmake がユーザー指定の環境変数に適切にアクセスできませんでした。

そのため、私が思いついた解決策の 1 つは、変数を Qmake 構成変数として追加することでした。

$PATHUNIX ベースのシステムを使用している場合、最初に行う必要があるのは、次のように、QtSDK フォルダーにある qmake の場所をシステムに追加することです。

export PATH=$PATH:/path/to/QtSDK/...../qmake_root

そこから、次の行に沿って何かを行うことができます。

qmake -set "VARIABLE" "VALUE"

この場合、私は単純に次のことを行いました。

qmake -set "ATLAS_PROJ_ROOT" $ATLAS_PROJ_ROOT.

そして、Qmake プロジェクト ファイル (.pro) で次のようにアクセスしました。

VAR = $$[ATLAS_PROJ_ROOT]

詳細については、こちらをご覧ください

于 2012-09-10T23:56:49.110 に答える