Premake4の使い方

自分用のまとめを兼ねてドキュメントを作った。
http://ousttrue.github.com/sphinx/premake4/index.html


premakeはいいものなのだがいまいち普及していない。
Gentooportageに入っていないくらい普及していない。


premakeがどんな人向けかと言うと

  • ideでいちいちマウスで設定するのがめんどくさい
  • automakeを書くのはめんどくさい
  • Makefileを書くのはめんどくさい
  • クロスプラットフォームが好きだ
  • premakeの設定を書くめんどくささは許す

というような人向けのツールだ。


その前に何ができるかというと
vcの.slnファイルと.vcprojを作成したり、
gcc向けのMakefileを作成することができる。
たぶんsconsとかcmakeの類だと思う。


そんなわけでこのたびpremake4(premake3から互換性が無くなった)
への環境移行を果たしたので
premake4の使い方をメモしておこうと思う。


まずは、premake4を下記からダウンロードして、
パスの通ったところに配置する。
http://industriousone.com/premake

サンプル

cygwinとvc両用のglutプログラム


まずは適当にディレクトリを掘ってコードを書く。
今回は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;
}

glut_sample/premake4.lua

-- 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でビルドできた。
こんな感じでソース共用で複数プラットフォームをまたぐ時はわりと便利。