2

私は、Makefile とビジュアル スタジオ プロジェクトの混在を取り除くために、CMake ファイルを作成した古いゲームに取り組んできました。すべてがうまく機能していますが、開発者がインストールの実行時に出力ファイルのコピー先を指定できるようにする正しい方法を理解するのに苦労しています。

問題は、多くの DLL といくつかのカスタム ターゲットがあり、コードをテストする前に、ゲーム データ (レベル、アート、サウンドなど) を含むディレクトリ構造に出力をコピーする必要があることです。

インストール コマンドは現在、最上位の CMakeLists.txt で「SET」した変数を使用して、出力ディレクトリを指定しています。cmakeコマンドラインで -DD3_GAMEDIR でオーバーライドしようとしました。その変数は CMakeCache で設定されますが、SET コマンドはそれをオーバーライドしているように見えます。

ユーザーが値を指定したかどうかを確認するために SET を使用する前に、変数の長さを確認する必要がありますか? それはハックのように思えますが、正しい方法を見つけるのに苦労しています。

ありがとう!

4

3 に答える 3

3

インストール ターゲットは DESTDIR パラメータをサポートしているため、次のようなことができます。

make install DESTDIR="C:\RootGameDir"

もう 1 つのオプションは、変数がまだ設定されていない場合にのみ設定することです ( if(myVar)) が、個人的には DESTDIR ソリューションを好みます。

于 2009-11-23T03:03:39.837 に答える
1

あなたのcmakeバージョンによると、これがアンサーです:

SET(CMAKE_VERSION "${CMAKE_CACHE_MAJOR_VERSION}.${CMAKE_CACHE_MINOR_VERSION}")
IF("${CMAKE_VERSION}" STRGREATER "2.4")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY /path/of/your/install/${CMAKE_BUILD_TYPE}/bin)
SET(CMAKE_LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib)
ELSE("${CMAKE_VERSION}" STRGREATER "2.4")
SET(EXECUTABLE_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/bin)
SET(LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib)
ENDIF("${CMAKE_VERSION}" STRGREATER "2.4")
于 2009-11-23T08:29:22.347 に答える
1

CMAKE_INSTALL_PREFIXさまざまな、PROJECT_SOURCE_DIRおよびを使用するのはどうPROJECT_BINARY_DIRですか?

于 2009-11-23T08:44:56.590 に答える