Saturday, May 19, 2018 / Objective-C, fractal

シェルピンスキーの三角形 を Ubuntu 18.04 で Objective-C と cairo をつかって描画

Objective-C をつかって terminal + make でビルド&実行できるコードスケッチ.
CoreGraphics の代わりに Cairo を使って シェルピンスキーの三角形 を描写します.

triangles

詳細
https://github.com/mindboard/objective-c-examples-on-ubuntu

事前準備

Ubuntu 18.04 のマシンにで以下のパッケージをインストールしておきます.

sudo apt install clang build-essential gnustep gnustep-make gnustep-devel

まずは Hello World

この状態で 一番簡単な Hello World をやってみます.

main.m

#include <Foundation/Foundation.h>

int main(int argc, const char * argv[]){
    NSLog(@"hello World!");
    return (0);
}

これをコンパイル

clang -c $< -I`gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` -fconstant-string-class=NSConstantString

しかし、これでは objc.h がない、というエラーが出てコンパイルできません.

/usr/include/GNUstep/Foundation/Foundation.h:31:9: fatal error: 'objc/objc.h' file not found
#import <objc/objc.h>

正しい解決方法がよくわからないのですが、自分の環境では objc.h を検索すると /usr/lib/gcc/x86_64-linux-gnu/7/include/objc/objc.h に存在していたので、 インクルードオプションにこれを加えるとうまくいきました。

clang -c $< -I`gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` -I/usr/lib/gcc/x86_64-linux-gnu/7/include/ -fconstant-string-class=NSConstantString

Hello World まとめ

以下のような Makefile を用意しておけば main.m から main を作り出すことができました。

Makefile

gnustep_include:=`gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS`
objc_include:=/usr/lib/gcc/x86_64-linux-gnu/7/include
atmarkstringoption:=-fconstant-string-class=NSConstantString
libraries:=-lgnustep-base -lobjc

default : run

run : main
    ./$<

main.o : main.m
    clang -c $< -I$(gnustep_include) -I$(objc_include) $(atmarkstringoption)

main : main.o
    clang -o $@ $< $(libraries)

clean : 
    $(RM) ./main
    $(RM) *.o

シェルピンスキーの三角形 を 描画する

本題の シェルピンスキーの三角形 は長いので割愛します。(時間があるときに追記するかも) 詳細は、以下の github レポジトリをご覧ください。

https://github.com/mindboard/objective-c-examples-on-ubuntu