Premake4の使い方
自分用のまとめを兼ねてドキュメントを作った。
http://ousttrue.github.com/sphinx/premake4/index.html
premakeはいいものなのだがいまいち普及していない。
Gentooのportageに入っていないくらい普及していない。
premakeがどんな人向けかと言うと
- ideでいちいちマウスで設定するのがめんどくさい
- automakeを書くのはめんどくさい
- Makefileを書くのはめんどくさい
- クロスプラットフォームが好きだ
- premakeの設定を書くめんどくささは許す
というような人向けのツールだ。
その前に何ができるかというと
vcの.slnファイルと.vcprojを作成したり、
gcc向けのMakefileを作成することができる。
たぶんsconsとかcmakeの類だと思う。
そんなわけでこのたびpremake4(premake3から互換性が無くなった)
への環境移行を果たしたので
premake4の使い方をメモしておこうと思う。
まずは、premake4を下記からダウンロードして、
パスの通ったところに配置する。
http://industriousone.com/premake
サンプル
まずは適当にディレクトリを掘ってコードを書く。
今回はpremake4が主題なのでglutは適当。
glut_sample/main.cpp
#include <GL/glut.h> void display(void) { } int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutCreateWindow("premake4 sample"); glutDisplayFunc(display); glutMainLoop(); return 0; }
-- premake4.lua solution "SampleSolution" configurations { "Debug", "Release" } -- A project defines one build target project "SampleProject" kind "WindowedApp" language "C++" files { "**.h", "**.cpp" } includedirs { -- -I/usr/include/openglに相当 "/usr/include/opengl" } libdirs { -- -L/usr/lib/w32apiに相当 "/usr/lib/w32api" } links { -- -lopengl32 -lglu32 -lglut32 に相当 "opengl32", "glu32", "glut32" } configuration "Debug" defines { "DEBUG" } -- -DDEBUG flags { "Symbols" } targetname "sample_debug" configuration "Release" defines { "NDEBUG" } -- -NDEBUG flags { "Optimize" } targetname "sample"
ちなみにluaはほとんど理解していない。
Makefile生成
$ premake4 gmake Building configurations... Running action 'gmake'... Generating Makefile... Generating SampleProject.make... Done.
make
$ make ==== Building SampleProject ==== Creating obj/Debug main.cpp Linking SampleProject
できたバイナリの動作には
cyggcc_s-1.dll cygstdc++-6.dll cygwin1.dll glut32.dllが必要だった。
さらにgcc4では-mno-cygwinが無くなっていた。
VCでビルドしてみる
$ premake4 clean $ premake4 vs2005 Building configurations... Running action 'vs2005'... Generating SampleSolution.sln... Generating SampleProject.vcproj... Done.
slnとvcprojが生成される。
$ cygstart SampleSolution.sln
問題なくvcでビルドできた。
こんな感じでソース共用で複数プラットフォームをまたぐ時はわりと便利。