[Obj-C] 01 コンソールアプリのMakefile

[M1 Mac, Big Sur 11.6.5, no Xcode]

Objective-CでのmacOSアプリ製作に着手しました。知識ゼロなので一から学んでいきます。GUIのXcodeは極力使わないようにします。

まずはコンソールアプリのMakefileを作成してみました。C++のテンプレを流用しています。今のところソースコードの内容についてはあまり理解していません。

次はWindowのあるアプリを作成します。

# コンパイラ
COMPILER = clang
DEBUG = -g

# オプション
CFLAGS =
LDFLAGS = -framework Cocoa

# includeパス(-I)
INCLUDE = -I.

# ソースファイル
SRCDIR = .
SRCS = $(SRCDIR)/test.m

# オブジェクトファイル
OBJDIR = .
OBJS = $(OBJDIR)/test.o

# 実行ファイル
TARGETDIR = .
TARGET = test

# コンパイル
$(OBJDIR)/test.o: $(SRCDIR)/test.m
	$(COMPILER) $(INCLUDE) $(DEBUG) -o $@ -c $<

# ビルド
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LDFLAGS)

# ファイル削除&ビルド
.PHONY:all
all: clean $(TARGET)

# ファイル削除
.PHONY:clean
clean:
	rm -rf $(OBJS) $(TARGETDIR)/$(TARGET)
#import "test.h"
 
@implementation AppDelegate
- (id) init {
    [super init];
    return self;
}
- (void) applicationDidFinishLaunching:(NSNotification *)aNotification{
    // アクティブ化
    [NSApp activateIgnoringOtherApps:YES];
}
@end
 
@implementation AppMenu
- (id) init {
    [super init];
    id item_app = [[NSMenuItem new] autorelease];
    [self addItem:item_app];
    id menu_app = [[NSMenu new] autorelease];
    [item_app setSubmenu:menu_app];
    id item_quit = [[NSMenuItem new] autorelease];
    [item_quit initWithTitle:@"Quit App" action:@selector(terminate:) keyEquivalent:@"q"];
    [menu_app addItem:item_quit];
    return self;
}
@end
 
int main(int argc, char *argv[]) {
    // メモリ管理
    [NSAutoreleasePool new];
    // NSApp作成
    [NSApplication sharedApplication];
    // setActivationPolicy
    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
    // メニュー設定
    id main_menu = [[AppMenu new] autorelease];
    [NSApp setMainMenu:main_menu];
    // Delegate
    id delegate = [[AppDelegate new] autorelease];
    [NSApp setDelegate:delegate];
    // メインループ
    [NSApp run];

    return 0;
}
#import <Cocoa/Cocoa.h>
 
@interface AppMenu : NSMenu
@end
 
@interface AppDelegate : NSObject<NSApplicationDelegate>
@end

参考サイト