2011-01-23 49 views
3

我有关于这个问题Unable to Compile Objective C using Gnustep on windows新手 - 不能编译目标C与GNUstep的

我试图在Windows上编译我的第一个目标C程序的问题。 该文件是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 make命令来执行GNUmakefile。

当我这样做是在GNUstep壳我得到一个错误

GNUmakefile:1 *** missing separator. Stop. 

我尝试添加一个标签到第一线。这没有做什么。是的,我确定这是一个标签,而不是空间。

+1

顺便说一句,你的`#包括<../blah>`工作?我习惯C要求`#include“../ blah”`用于相对于源的路径。 – sarnold 2011-01-23 02:53:22

+0

@sarnold它可能会或可能不会工作。 “”和“>”之间的区别是搜索包含头文件的起始位置。 “”与项目源相关,并且<>通常在系统定义的包含路径开始。 – MKroehnert 2011-02-18 09:53:49

回答

1

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

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

这意味着,让看不惯很多关于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 
1

你不应该以提供Foundation.h头文件的完整路径。 它应该始终是#import <Foundation/Foundation.h>

这与您的makefile问题一起表明您的机器上没有正确安装。 您是从msys shell还是从Windows命令行运行make命令? 如果您选择使用Windows命令行,您将面临一些问题,因为与GNUstep安装程序提供的msys shell相反,环境设置不正确。

如果你想另一方面手动运行gcc你可以看看这个SO answer

3

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

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

0

在你GNUmakefileYourProg_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 like pkg-config命令可以打印出gcc的编译和链接选项。