我有一个与此问题有关的问题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.
我尝试在第一行添加标签。这没什么。是的,我确信这是一个标签,而不是空格。
答案 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的编译和链接选项。