1

いくつかのTCPサーバーへのクロスプラットフォームライブラリを使用したライブビデオストリーミング用のシンプルなコンソールアプリケーションプロジェクトがあります。WindowsからLinuxとMacOSXに手動で移植しました。これで、同じコードを使用する3つのプロジェクトがあり、それぞれが手動で作成され、テストされています。現在、プロジェクトファイルの更新プロセスを自動化するために、premakeluaプロジェクト作成ファイルを作成しようとしています。

luaファイルの作成を開始しました

premakeluaビルドファイルにlibリンクの配列があります。プロジェクトに必要なlibリンクの配列があります。

それらのいくつかは、それらのいくつかを繰り返すようなものです(たとえば、Windowsには「openal32」があり(Windows 7 64ビットバージョンでも)、Linuxでは「openal」という名前があり、MacOSXでは「OpenAL.framework」という名前があります。 (そして、openALを含めるためのmac osの唯一のオプション)

linkdirsプロパティを設定しています-すべてのシステムに1つ

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib" }

dirsへのリンクは、おそらくMac OS X(デフォルトでにインストールされるMac Portsを使用しているため)およびLinux(ほとんどの場合、すべてを、場合によってはに/opt/local/lib自動インストールするapp-getアナログを使用するため)で機能します。しかし、Windowsでは、ffmpegがどこにあるか、またはBoostがインストールされている場所がわからないため(おそらく、各プログラマーはWindowsのLibsとHeadersをどこに保持するかについて独自の考えを持っています...)、premakeから簡単なものが必要です。usr/lib/usr/local/lib

配列に含まれるユーザー定義のライブラリディレクトリを追加するアクションと、libdirs配列と同じものincludedirs。複数のディレクトリを追加できる必要があります。

そのようなことを可能にする方法は?

私は次のような「オプションベースのシステム」を作成しようとしました

newoption {
trigger = "libsPath",
value = "PATH",
description = "Choose a particular directory for general libs search"
}
if not _OPTIONS["libsPath"] then
_OPTIONS["libsPath"] = NULL
end

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib",
_OPTIONS["libsPath"]
}

しかし、それはウィンドウズでは機能しないようです...どうすればいいですか?

4

2 に答える 2

5

このビットは必要ありません:

if not _OPTIONS["libsPath"] then
   _OPTIONS["libsPath"] = NULL
end

設定されていない場合は、すでに nil (Lua の NULL に相当) になります。それ以外の場合、これは見栄えがよく、私にとってはうまく機能します。

考えられる改善の 1 つは、引数を変換してパスの区切りリストを受け入れることです。これにより、ユーザーは必要に応じて複数のパスを指定できます。したがって、セミコロンで区切られたパスを使用して、次のようにスクリプトを呼び出した場合:

C:\> premake4 /libsPath=C:\Code\Libs;C:\Code\MoreLibs vs2010

次のようにライブラリ検索パスに追加します。

-- Split it up
libdirs { string.explode(_OPTIONS["libsPath"], ";") }

テストされていませんが、動作するはずです。それが役立つことを願っています!

于 2011-03-11T13:29:07.397 に答える
0

ユーザーがインクルード ディレクトリまたはライブラリ ディレクトリを指定できるようにする場合、最も簡単な方法の 1 つは環境変数を使用することです。スクリプトを実行すると、EXTRA_LIB_PATHSand EXTRA_INCLUDE_PATHS(または任意の名前) という名前の環境変数を検索し、そこにリストされているパスを、言及した定義済みのパス リストに追加できます。

Windows、Linux、および OSX にはすべて環境変数の概念がありますが、まったく同じ形式を使用しているわけではありません。Windows 環境変数のディレクトリ パスのリストは通常​​セミコロンで区切られますが、Linux では通常コロンが使用されます。環境変数を解析するコードが現在のプラットフォームを検出し、適切な方法を使用してデータを抽出できることを確認する必要があります。

もう 1 つの可能性は、ディレクトリ パスをコマンド ライン オプションとして premake スクリプトに渡すことです (premake.lua -L/path/to/lib -I/my/include/path -L/another/lib/pathなどの構文を使用します)。ここでの欠点は、コマンド ラインがかなり長くなる可能性があることと、一部のコンソールでは CLI コマンドの長さに制限がある場合があることです。いくつかの追加パスを使用する場合は、CLI 引数よりも環境変数を使用することをお勧めします。

于 2011-03-08T19:02:02.090 に答える