Windows下的Objective-C集成开发环境(IDE)的搭建 (二)


Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第1张图片

Windows下的Objective-C集成开发环境(IDE)的搭建 (二)

继上一步Windows下的Objective-C集成开发环境(IDE)的搭建 (一)配置运行命令行程序后,今天来讲解一下如何使用

codeblocks配置开发使用cocoa framework开发GUI程序。

Java代码
收藏代码
  1. #include"AppController.h"
  2. #include<AppKit/AppKit.h>
  3. intmain(intargc,constchar*argv[])
  4. {
  5. NSAutoreleasePool*pool;
  6. AppController*delegate;
  7. pool=[[NSAutoreleasePoolalloc]init];
  8. delegate=[[AppControlleralloc]init];
  9. [NSApplicationsharedApplication];
  10. [NSAppsetDelegate:delegate];
  11. RELEASE(pool);
  12. returnNSApplicationMain(argc,argv);
  13. }

我们使用一个helloworld开始旅程。

这个helloworld程序共有五个文件:main.m、AppController.h、AppController.m、helloworldInfo.plist和GNUmakefile。图形界面的设计全部在代码中。

  1. 第一步:使用codeblocks新建一个c的console程序。这里命名该工程名为gui,如图所示:
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第2张图片
  2. 添加一个main.c文件,将下面的代码拷贝并覆盖main.c中内容#include "AppController.h"
    1. Cpp代码
      收藏代码
      1. #include<AppKit/AppKit.h>
      2. intmain(intargc,constchar*argv[])
      3. {
      4. NSAutoreleasePool*pool;
      5. AppController*delegate;
      6. pool=[[NSAutoreleasePoolalloc]init];
      7. delegate=[[AppControlleralloc]init];
      8. [NSApplicationsharedApplication];
      9. [NSAppsetDelegate:delegate];
      10. RELEASE(pool);
      11. returnNSApplicationMain(argc,argv);
      12. }

  3. 添加一个AppController.h 头文件,内容如下:
    Cpp代码
    收藏代码
    1. <spanstyle="white-space:normal;background-color:#ffffff;">#ifndef_AppController_H_</span>
    Cpp代码
    收藏代码
    1. #define_AppController_H_
    2. #include<Foundation/NSObject.h>
    3. @classNSWindow;
    4. @classNSTextField;
    5. @classNSNotification;
    6. @interfaceAppController:NSObject
    7. {
    8. NSWindow*window;
    9. NSTextField*label;
    10. }
    11. -(void)applicationWillFinishLaunching:(NSNotification*)not;
    12. -(void)applicationDidFinishLaunching:(NSNotification*)not;
    13. @end
    14. #endif/*_AppController_H_*/<spanstyle="white-space:pre;"></span>
  4. 实现一个AppController.h的AppController.m文件#include "AppController.h"
    Cpp代码
    收藏代码
    1. #include<AppKit/AppKit.h>
    2. @implementationAppController
    3. -(void)applicationWillFinishLaunching:(NSNotification*)not
    4. {
    5. /*CreateMenu*/
    6. NSMenu*menu;
    7. NSMenu*info;
    8. menu=[NSMenunew];
    9. [menuaddItemWithTitle:@"Info"
    10. action:NULL
    11. keyEquivalent:@""];
    12. [menuaddItemWithTitle:@"Hide"
    13. action:@selector(hide:)
    14. keyEquivalent:@"h"];
    15. [menuaddItemWithTitle:@"Quit"
    16. action:@selector(terminate:)
    17. keyEquivalent:@"q"];
    18. info=[NSMenunew];
    19. [infoaddItemWithTitle:@"InfoPanel..."
    20. action:@selector(orderFrontStandardInfoPanel:)
    21. keyEquivalent:@""];
    22. [infoaddItemWithTitle:@"Preferences"
    23. action:NULL
    24. keyEquivalent:@""];
    25. [infoaddItemWithTitle:@"Help"
    26. action:@selector(orderFrontHelpPanel:)
    27. keyEquivalent:@"?"];
    28. [menusetSubmenu:info
    29. forItem:[menuitemWithTitle:@"Info"]];
    30. RELEASE(info);
    31. [NSAppsetMainMenu:menu];
    32. RELEASE(menu);
    33. /*CreateWindow*/
    34. window=[[NSWindowalloc]initWithContentRect:NSMakeRect(300,300,200,100)
    35. styleMask:(NSTitledWindowMask|
    36. NSMiniaturizableWindowMask|
    37. NSResizableWindowMask)
    38. backing:NSBackingStoreBuffered
    39. defer:YES];
    40. [windowsetTitle:@"HelloWorld"];
    41. /*CreateLabel*/
    42. label=[[NSTextFieldalloc]initWithFrame:NSMakeRect(30,30,80,30)];
    43. [labelsetSelectable:NO];
    44. [labelsetBezeled:NO];
    45. [labelsetDrawsBackground:NO];
    46. [labelsetStringValue:@"HelloWorld"];
    47. [[windowcontentView]addSubview:label];
    48. RELEASE(label);
    49. }
    50. -(void)applicationDidFinishLaunching:(NSNotification*)not
    51. {
    52. [windowmakeKeyAndOrderFront:self];
    53. }
    54. -(void)dealloc
    55. {
    56. RELEASE(window);
    57. [superdealloc];
    58. }
    59. @end
  5. 接下来是配置gui.plist文件:
    Cpp代码
    收藏代码
    1. {
    Cpp代码
    收藏代码
    1. ApplicationDescription="HelloWorldTutorial";
    2. ApplicationIcon="";
    3. ApplicationName=HelloWorld;
    4. ApplicationRelease=0.1;
    5. Authors="";
    6. Copyright="Copyright(C)200xby...";
    7. CopyrightDescription="Releasedunder...";
    8. FullVersionID=0.1;
    9. URL="";
  6. 最后是比较重要的GNUmakefile:
    Cpp代码
    收藏代码
    1. GNUSTEP_MAKEFILES=D:/GNUstep/GNUstep/System/Library/Makefiles
    2. include$(GNUSTEP_MAKEFILES)/common.make
    3. APP_NAME=GUI
    4. $(APP_NAME)_HEADERS=AppController.h
    5. $(APP_NAME)_OBJC_FILES=main.mAppController.m
    6. $(APP_NAME)_RESOURCE_FILES=guiInfo.plist
    7. include$(GNUSTEP_MAKEFILES)/application.make
  7. 上述步骤中比较关键的是GNUmakefile的编写,其中GNUSTEP_MAKEFILES是我指定的GNUStep的安装目录的makefiles目录,APP_NAME是配置app名称,headers是header文件,如果存在多个.h文件,可以指定为*.h,OBJC_FILES为指定.h实现文件,如果有多个可以指定为*.m, RESOURCE_FILES为整个工程的属性配置文件。整个工程的截图如下:
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第3张图片
  8. 第二步:配置codeblocks,进入Settings->Compiler and Debugger->Gobal compiler setting选项卡中点击“copy”按钮,并将该compiler命令为GNU Compiler Cocoa(可以随意指定),如图:
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第4张图片
  9. 选择Toolchain executables ,设置compiler's installation directory 为你安装GUNStep的目录,我但前目录为D:\GNUstep,然后配置c compiler ,c++ compiler 等可执行文件,注意这个文件在D:\GNUstep\bin目录下,如图:
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第5张图片
  10. 注意下图所示的红色区域,一定要选择正确的make可执行文件,在GNUstep\msys\1.0\bin目录下,笔者的目录为D:\GNUstep\msys\1.0\bin\make.exe,配置正确之后,点击OK
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第6张图片
  11. 右键点击工程“gui”,选择“properties”,在"project setting"中勾选”this is a custom Makefile"复选框,Makefile的名称必须为GNUmakefile, "Execution Directory"选择工程所在文件目录。如图所示
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第7张图片
  12. 右键点击工程“gui”,选择“build options”,在debug分支中选择上一步配置好的compiler,即“GNU Compiler Cocoa",然后在下方的"Make" commands中配置下面的选项,如下所示:
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第8张图片
  13. 上述步骤完成之后,Antr+F11重新编译工程,如果没有问题的话,会有如下输出:
  14. Cpp代码
    收藏代码
    1. <spanstyle="white-space:normal;background-color:#ffffff;">--------------Clean:Debugingui---------------</span>
    Cpp代码
    收藏代码
    1. Cleaned"gui-Debug"
    2. --------------Build:Debugingui---------------
    3. Usingmakefile:GNUmakefile
    4. Thisisgnustep-make2.6.1.Type'make.exeprint-gnustep-make-help'forhelp.
    5. MakingallforappGUI...
    6. Copyingresourcesintotheappwrapper...
    7. Processterminatedwithstatus0(0minutes,1seconds)
    8. 0errors,0warnings
  15. 编译过程中可能出现以下错误:Compile-Error Windows : native-objc-exceptions does not match that of gnustep-base,解决办法如下,将D:\GNUstep\GNUstep\System\Library\Headers\GNUstepBase\GSConfig.h :中BASE_NATIVE_OBJC_EXCEPTIONS 定义的值改为1即可。
  16. 至此,我们已经可以在codeblocks中编译基于cocoa框架的应用,但是编译出来的文件在目录APP_NAME.app文件夹中,如何才能让编译的文件在bin\Debug目录中呢?打开GNUmakefile可以得知,该文件导入了两个系统提供的make文件,一个是common.make,另外一个是application.make文件,找到application.make文件,该文件在笔者的文件路径为D:\GNUstep\GNUstep\System\Library\Makefiles\Instance\application.make,打开该文件,修改APP_DIR_NAME的值为$(GNUSTEP_BUILD_DIR)/bin/Debug,APP_DIR的值为$(GNUSTEP_BUILD_DIR)/bin/Debug 即可,这样就可以实现
  17. 在codeblocks中编译运行。效果如图
    Windows下的Objective-C集成开发环境(IDE)的搭建 (二)_第9张图片

你可能感兴趣的:(Objective-C)