您好我是初学者学习目标c。 我发现错误“hello.m:1:34:Foundation / Foundation.h:没有这样的文件或目录” 我知道我需要制作一个make文件 我可以知道如何制作制作文件
答案 0 :(得分:5)
无需创建makefile。如果您从“所有程序 - > GNUstep - > Shell”启动MinGW,如上面的Pax所示,您只需编译.m文件即可。
我的GNUstep安装位于c:\ GNUstep \ GNUstep \ System中。如果您的不同,则应相应地更改Foundation.h的导入。
我这样做了:
// ---------- Hello.m
#import <../../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;
}
// ----------
启动MinGW shell。 (见上文。)
在shell命令行上,切换到程序代码所在的目录。 (请注意,由于这不是Unix,因此必须包含Windows驱动器号。):
cd / c / myprogs / obj -c / hello
编译程序:
gcc -o hello hello.m -I / c / GNUstep / GNUstep / System / Library / Headers \
-L / c / GNUstep / GNUstep / System / Library / Libraries -lobjc -lgnustep-base \
-fconstant字符串类= NSConstantString
(注意“\”字符允许我们将命令扩展到多行。)
编译时收到以下信息性消息:
Info: resolving ___objc_class_name_NSAutoreleasePool by linking to __imp____objc_class_name_NSAutoreleasePool (auto-import)
Info: resolving ___objc_class_name_NSConstantString by linking to __imp____objc_class_name_NSConstantString (auto-import)
运行生成的hello.exe给了我这个:
2009-06-03 14:44:59.483 hello[1240] Hello from Hello.m!
答案 1 :(得分:3)
这个问题看起来好像你没有指示gcc在哪里找到相关的包含文件(即Foundation/Foundation.h
所在的目录)。
您是从MinGW下运行gcc还是从命令提示符运行gcc。你应该在你的开始菜单上有一个“All Programs -> GNUstep -> Shell"
,它会打开这个shell。
这个的makefile应该简单如下:
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = YourProg
YourProg_OBJC_FILES = source_code.m
include $(GNUSTEP_MAKEFILES)/tool.make
答案 2 :(得分:1)
如果您将源代码放入GNUStep的主目录中,则无需提供Foundation框架的相对位置。
答案 3 :(得分:0)
使用诸如paxdiablo指定的makefile之类的makefile可能是最简单的,因为您不是每次都想记住一个神秘的命令行,而是设置makefile然后从源文件夹中调用make。 但是,我在Windows下的经验表明,即使使用shell,GNUStep和Windows也不会使用它,因为它无法找到所需的所有make文件 - 添加一个环境变量GNUSTEP_MAKEFILES,其值为/ GNUstep / System / Library / Makefiles并重新启动那个shell,然后它无法找到标准makefile的任何错误都应该是历史记录。 (我曾尝试使用makefile的完整路径,但发现这包括特定的makefile,但在尝试包含更多的文件时失败了,因此转向简单的路径并添加环境变量。)