問題タブ [premake]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
build-process - Makefile ジェネレーター: プリメイクとベークファイル?
私の C++ ビルド プロセスでは、ビルド ターゲットを XML で指定できる便利な小さな Makefile ジェネレーターであるBakefileを使用しており、そこからさまざまな Makefile またはプロジェクト ファイルを生成できます。これは問題なく動作し、GNU autotools スクリプトの生成に使用しています。
同様の機能を持っていると思われるPremakeについて聞いたことがあります。Luaでターゲットを指定すると、それに応じて Makefile が生成されます。
Bakefile と Premake の違いを知っている人はいますか? 両方の経験がある人はいますか?Premake はより最近で、より活発な開発が行われているように見えますか?
XML パーサーticppは Premake を使用しますが、ticpp をビルドする前に premake をダウンロードする必要があります。最初に premake をダウンロードしてインストールする必要がないように、さまざまなシステム用の Makefile を事前に生成することはできませんか?
注:最適なビルド ツールについてはさまざまな SO スレッドがあることは知っていますが、通常、答えはCMake、SConsまたはJamです。ただし、ユーザーがプロジェクトをビルドする前にダウンロードする必要のないものに興味があります。
xcode - から関数をリンクするときの OSX/Darwin の未解決のシンボル
私は、大規模な (~1M LOC) プロジェクトを Window/Visual Studio 環境から他のプラットフォームに移植する過程にあり、最初のプラットフォームはたまたま Mac OS X でした。
当初、プロジェクトは Visual Studio ソリューションおよびプロジェクトとして構成されていましたが、現在は (優れた) Premake ( http://industriousone.com/premake ) を使用して、複数のプラットフォーム (VS、XCode、GMake) 用のプロジェクト ファイルを生成しています。
最初のいくつかのプロジェクトを構成、移植、および構築しましたが、大きな問題はありませんでしたが、数学ライブラリを移植した後、解決できなかったこの奇妙なリンクエラーに遭遇しました: math.h から使用された関数はリンクに失敗します。 (未解決のシンボルの原因)。
参考までに、x86_64 アーキテクチャ用の gcc v4.2 を使用してビルドしている XCode v3.2.1 のプロジェクトを生成するために Premake v4.2.1 を使用しています。(これはすべて 64 ビットの Snow Leopard で) -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 を追加して、「既知の」SDK に対してすべてをリンクおよびビルドするように gcc を説得しようとしました。ビルド コマンド ラインに。
通常の状況では、-lm を追加することでこれを処理できますが、Darwin では、これらの数学ライブラリは libSystem に含まれており、私が知る限り、gcc/ld によって暗黙的にリンクされます。
XCode内から実行するだけのダミープロジェクトを作成しようとしました:
予想通り、これは問題なくビルドできます。しかし、Premake で生成されたプロジェクト内のコードに同じものを入れると、それらの数学関数はすべて未解決になってしまいます。
「ネイティブ」XCode プロジェクトからのリンク コマンドと、生成された XCode プロジェクトを比較すると、それらはかなり同じように見えます (生成されたプロジェクトが他のライブラリもリンクしていることを除いて)。
「ネイティブ」プロジェクト:
生成されたプロジェクト:
続行する方法についてのヘルプやヒントをいただければ幸いです。これを解決するのに役立つ gcc フラグやその他のツールはありますか?
c++ - 再帰的な依存関係の集約によるシステムの構築
私は最近、クロス プラットフォーム ビルド システム (メイク ファイル、ビジュアル スタジオ ソリューション/プロジェクトなどをオンデマンドで生成する) を使用して独自のライブラリとプロジェクトのセットアップを開始しましたが、既に解決されている可能性が高い問題に遭遇しました。
私が遭遇した問題は次のとおりです。アプリケーションに依存関係もある依存関係がある場合、リンクされるアプリケーションは依存関係とそのすべてのサブ依存関係をリンクする必要があります。これは再帰的に進行します。
(議論のために、静的ライブラリのみを扱っていると仮定しましょう。)
- TopLevelApp.exe
- 依存関係_A
- 依存_A-1
- 依存_A-2
- 依存関係_B
- 依存関係_B-1
- 依存関係_B-2
- 依存関係_A
したがって、この例では、TopLevelApp は、dependency_A、dependency_A-1、dependency_A-2 などをリンクする必要があり、B についても同様です。ターゲット アプリケーションでこれらすべてを手動で記憶する責任は、最適ではないと思います。また、依存関係の同じバージョンがすべてのターゲットで使用されることを保証するという問題もあります (一部のターゲットが同じものに依存していると仮定すると、boost など)。
現在、すべてのライブラリをリンクする必要があり、それを回避する方法はありません。私が探しているのは、これを管理するビルド システムです。したがって、何かに依存することを指定するだけで、そのライブラリの適切な依存関係が自動的に取り込まれます。
私が調べているビルドシステムは、これを処理しない premake premake4です(私が判断できる限り)。これを処理するビルドシステムを知っている人はいますか? ない場合は、なぜですか?
cross-platform - Premakeプロジェクトのビルド/構成スクリプト:ユーザーがlibs(libdirs)とincludes(includedirs)を使用してパスの配列に独自のパスを追加できるようにするにはどうすればよいですか?
いくつかの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つ
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
。複数のディレクトリを追加できる必要があります。
そのようなことを可能にする方法は?
私は次のような「オプションベースのシステム」を作成しようとしました
しかし、それはウィンドウズでは機能しないようです...どうすればいいですか?
lua - premake4 初心者向けの Lua: 'variable = {"a", "b"}' は 'variable {"a", "b"}' と同じですか?
プリメイクでは、同じことになるような構造 files { "**.h", "**.cpp" }
がfiles = { "**.h", "**.cpp" }
ありますか?
c++ - Premake4: mac os x xcode C++ プロジェクトを設定して、「アクティブな構成のみをビルドする」オプションをアクティブにする方法は?
問題: オプションを指定しないと、xcode プロジェクトはできる限りのビルドを試みます (私の場合、i386 だけでなく、ライブラリがなく、必要のない他のアーキテクチャもいくつかビルドしようとします)。
現在の解決策 - 生成された xcode プロジェクトを開き、すべての構成でそのオプションを設定します。
望ましい解決策 - premake スクリプト内でそのオプションを設定する必要があります。
質問 - どうやってそんなに欲しいことをするのですか?
lua - premake ビルド スクリプトからカスタム ツールを実行するにはどうすればよいですか?
C++ アプリケーションでデータのシリアル化にプロトコル バッファを使用しています。プリメイクprotoc
ビルド スクリプトにコード ジェネレーターの呼び出しを追加したいと考えています (これにより、生成されたクラスの最新の状態が保証され、生成されたソースをバージョン管理下に保存する必要がなくなります)。
彼らのFAQにもこれに関する質問と回答がありますが、私にとってその回答は非常に不完全です. 任意の lua 関数を呼び出すことができるのは素晴らしいことですが、その呼び出しを正確にどこに置くのでしょうか? アプリケーションまたは単体テストをビルドする前に、protoc コンパイラを実行する必要があります。
lua - *.lua ファイルで premake を使用する方法
使い方はpremake4
?.lua
コンパイルしたいファイルがあります。
実行可能ファイルをダウンロードしましたpremake4
が、実行./premake4 myfile
するとエラーが発生します。
visual-studio - OpenGL SDK Premake で新しいプロジェクトを作成する方法
私は最近、C++ を使用していくつかのグラフィカル アプリケーションを作成するために OpenGL を学習するプロセスを開始しました。OpenGL SDK をインストールしました。その上でプロジェクトを適切にビルドできます。ただし、OpenGL SDK サイトには、freeglut などの SDK の要素を使用して新しいプロジェクトを作成する方法に関する情報がほとんどまたはまったくありません。 lua ファイルを作成しますが、私は lua を知りません。また、Lua ファイルを使用して新しいプロジェクトを作成する方法もわかりません。それで、私を助けてくれませんか?VS2010 を使用していますが、プロジェクトを作成してから premake で何かを行う必要がありますか? または、ある種の lua ファイルを作成し、その上で premake を使用しますか? 私は非常に迷っており、OpenGL を本当に始めたいと思っているので、どんな助けも素晴らしいでしょう。これについては、いろいろと実験しましたが、
c++ - 静的ライブラリを作成し、premakeを使用してそれにリンクする
私は現在、OpenGLsdkに適用するためにpremake4を使用する方法を学ぼうとしています。私は現在、2つのプロジェクトを構築するVisual Studio 2010ソリューションを作成しようとしています。一方は静的ライブラリであり、もう一方はmainメソッドを使用して単一のメインソースファイルを含みます。
このプロジェクトは非常にシンプルで、プレメイクを学ぶことだけを目的としています。Testという名前の静的ライブラリプロジェクトには、Test.hとTest.cppの2つのファイルがあります。Test.hには、メソッドprint()のプロトタイプが含まれています。print()は、コンソールに1行を出力するだけです。premakeを使用して、静的ライブラリをMainプロジェクトにリンクし、main.cppにTest.hファイルを含めました。私の問題はこれです:VS2010では、ビルドしようとすると次のエラーが発生します:
これが4つのファイルpremake4.luaの私のコードです:
Test.cpp:
Test.h:
Main.cpp:
なぜそこにgetch()があるのか疑問に思っている場合、私のコンピューターでは、コンソールが0に達するとすぐに閉じるので、getch()を使用してその問題に対処します。これにより、ユーザーが別のキーを押すまでウィンドウが強制的に待機します。 。問題が何であるかわからないので、この問題に関するアドバイスは素晴らしいでしょう。単純なものである場合は、去勢しないでください。プリメイクライブラリと静的ライブラリの経験がほとんどないため、それらを学習しようとしています。