当前位置: 首页 > 工具软件 > GNUstep > 使用案例 >

GNUstep学习笔记

沈永贞
2023-12-01

一、安装GNUstep for Windows

Windows installer

http://wwwmain.gnustep.org/experience/Windows.html

GNUstep MSYS

GNUstep Core

GNUstep Devel

三个安装包都需要下载,GNUstep MSYS和GNUstep Core相当于Objective-C的运行时,而GNUstep Devel相当于XCode中使用的Foundation和UIKit

GNUstep Devel依赖于GNUstep MSYS和GNUstep Core才可以运行。

 

二、测试GUI运行情况

上面的安装包默认不安装任何图形界面的程序。

只能通过开始菜单->GNUstep->Shell启动MSys命令行执行一些命令行指令。

基本操作和MinGW相同,唯一不同的是在

C:\GNUstep\GNUstep\System\Tools

有一些特有的程序,如openapp。

在官网上有个现成的示例代码包。

http://wwwmain.gnustep.org/resources/downloads.php?site=ftp%3A%2F%2Fftp.gnustep.org%2Fpub%2Fgnustep%2F

搜索GNUstep Development Tools下的Examples:

ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-examples-1.3.0.tar.gz

下载解压后,切换到指定目录下执行make即可编译,用openapp运行

 

 

$ tar xzf gnustep-examples-1.3.0.tar.gz
$ cd gnustep-examples-1.3.0
$ cd gui
$ cd Calculator
$ make
$ make print-gnustep-make-help
$ Calculator.app/Calculator.exe
$ openapp ./Calculator.app
  

三、使用gdb调试

HelloWorld命令行程序的编写、编译和调试方法参见:

http://www.nongnu.org/gstutorial/zh_TW/index.html

NSLog的输出需要gdb(直接执行程序是无法看到输出的),所以必须先了解gdb的使用方法(通常的做法是用.gdbinit编写调试脚本,所以必须搞清楚这个gdb支持哪些命令)。

 

1. 帮助:

http://sourceware.org/gdb/onlinedocs/gdb/

http://www.nongnu.org/gstutorial/

http://www.nongnu.org/gstutorial/en/index.html

http://www.nongnu.org/gstutorial/zh_TW/index.html

 

2. 相关问题

1) .gdbinit文件需要用echo创建。(或者用touch命令)

2) 用gdb -ex "help all" -ex "quit" > gdbhelp.txt查看gdb支持的指令(尽量写在.gdbinit文件中,在执行gdb时自动执行)。

3) GNUmakefile不能改名为Makefile,否则执行make后会出错。

4) 只有使用gdb时才可以看到NSLog的输出。

 

3. 参考代码和命令

 

.m文件(objc代码)

 

//prog1.m
#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
	NSLog(@"Hello World!");
	[pool drain];
	return 0;
}

 

GNUmakefile文件(编译用)

 

# GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make

APP_NAME = HelloWorld
HelloWorld_HEADERS =
HelloWorld_OBJC_FILES = prog1.m
HelloWorld_RESOURCE_FILES =

include $(GNUSTEP_MAKEFILES)/application.make

 

.gdbinit(调试用,不是必需的,用于屏蔽调试输出,因为gdb默认读取.gdbinit中的指令

 

# .gdbinit
# http://sourceware.org/gdb/onlinedocs/gdb/

set debugevents off  
set debugexceptions off  
set print thread-events off

run
quit

 

执行命令:(openapp --debug等效于debugapp)

 

$ echo hello > .gdbinit
$ gdb -ex "help all" -ex "quit" > gdbhelp.txt
$ make
$ openapp --debug ./HelloWorld.app
$ debugapp ./HelloWorld.app
$ gdb --quiet ./HelloWorld.app/HelloWorld.exe

 

 

 

 

(TODO)

 

 类似资料: