2017-09-28 17 views
0

Mesonを使用してC++で小さなゲームを構築したいと考えています。のは、論文は私のファイルであることを言ってみましょう:ここデータ/資産とポータブル/相対パスで作業するMeson

. 
├── img 
│   └── img.png 
├── meson.buid 
└── src 
    ├── main.cpp 
    └── meson.build 

meson.buidファイルは、次のとおりです。

# meson.build 
project('mygame', 'cpp') 
subdir('src') 
pkgdatadir = join_paths(get_option('datadir'), 'mygame') 
install_subdir('img', install_dir : join_paths([pkgdatadir, 'img'])) 

そして、第二のファイル:私のC++コードで

# src/meson.build 
executable('mygame', 'main.cpp', install : true) 

、どのようなパスがIべきバンドルされたアプリケーションを作成した可能性がある場合は、を使用して、資産ファイルを移植可能な(相対的な)方法(Windows、OS X、Linux)でロードするか、 eb)システムファイル階層のパッケージ?

ビルドディレクトリにninjaでビルドすると、すべてのゲームデータにインストールする必要がなく、ファイルパスが機能します。

コンパイル時にDATA_PREFIXという定義を追加するか、環境変数を使用すると考えました。

http://mesonbuild.com/Installing.htmlおよびhttp://mesonbuild.com/Reference-manual.html#install_dataを参照してください。

ありがとうございます。

答えて

1

私が推薦する方法であり、コンパイル時に

を設定定義DATA_PREFIXを追加することを考えました。あなたはその後、出力することを含むヘッダをconfigure_file()を使用することができます。

conf = configuration_data() 
conf.set_quoted('PACKAGE_DATADIR', join_paths(get_option('prefix'), pkgdatadir)) 
configure_file(
    output: 'config.h', 
    configuration: conf 
) 

は、それからちょうどあなたのソースでconfig.hが含まれます。

+0

>すべてのゲームデータにインストールすることなく、ビルドディレクトリにninjaを作成すると、ファイルパスが有効になります。 どうすればよいですか?プレフィックスを変更しますか?どうやって ? –

+1

あなたは 'run_target()'を使い、その後env変数 'MESON_SOURCE_ROOT'と' MESON_BUILD_ROOT'をコードチェックでチェックします – TingPing