Objective-C をつかって terminal + make でビルド&実行できるコードスケッチ.
CoreGraphics の代わりに Cairo を使って シェルピンスキーの三角形 を描写します.
詳細
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! をやってみます.
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
以下のような 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 レポジトリをご覧ください。