新手 - 用GNUStep编译目标c

时间:2011-01-23 02:25:07

标签: objective-c windows gnustep

我有一个与此问题有关的问题Unable to Compile Objective C using Gnustep on windows

我正在尝试在Windows上编译我的第一个目标c app。 该文件是hello.m(以下所有在Visual Studio中创建的文件)

#import <../Program Files/GNUstep/System/Library/Headers/Foundation/Foundation.h>

int main(int argc, const char* argv[])
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello from Hello.m!");

    [pool release];
    return 0;
}

为了编译它,我在同一目录中有一个GNUmakefile:

include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = hello
YourProg_OBJC_FILES = hello.m
include $(GNUSTEP_MAKEFILES)/tool.make

据我了解,当我运行命令“make”时,GNUmakefile将执行。

当我在GNUStep shell中执行此操作时出现错误

GNUmakefile:1 *** missing separator. Stop.

我尝试在第一行添加标签。这没什么。是的,我确信这是一个标签,而不是空格。

4 个答案:

答案 0 :(得分:3)

我有同样的问题。我使用Notepad ++制作GNUmake文件。我使用Notepad ++的默认编码是UTF8。但来自MINGW32的make.exe似乎在等待使用ANSI编码的文件。

因此,请验证您的文件是否使用ANSI进行编码。

答案 1 :(得分:1)

make抱怨你的makefile,所以你可能在某处有语法错误。

请参阅:http://www.gnu.org/software/automake/manual/make/Error-Messages.html

  

这意味着make无法理解它刚刚阅读的makefile行的任​​何内容。 GNU make查找各种分隔符(:,=,配方前缀字符等)以指示它正在解析的行类型。此消息表示找不到有效的消息。

尝试直接编译:

gcc -o hello hello.m -I/c/GNUstep/GNUstep/System/Library/Headers \
    -L /c/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base \
    -fconstant-string-class=NSConstantString

答案 2 :(得分:1)

您永远不必提供Foundation.h头文件的完整路径。 它应始终为#import <Foundation/Foundation.h>

这与您的makefile问题一起表明您的计算机上未正确设置某些内容。 您是从msys shell还是从Windows命令行运行make命令的? 如果选择使用Windows命令行,则会遇到一些问题,因为环境设置不正确,与GNUstep安装程序提供的msys shell相反。

如果您想另一方面手动运行gcc,可以查看此SO answer

答案 3 :(得分:0)

GNUmakefile 中, YourProg_OBJC_FILES 应修改为 hello_OBJC_FILES ,如下所示

include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = hello
hello_OBJC_FILES = hello.m
include $(GNUSTEP_MAKEFILES)/tool.make

或者你也可以在这样的命令行中编译

$ gcc `gnustep-config --objc-flags` hello.m -o hello `gnustep-config --base-libs`

gnustep-config ,如 pkg-config 命令可以打印出gcc的编译和链接选项。