嗨,我是初学者学习目标 c。我发现一个错误“hello.m:1:34: Foundation/Foundation.h: No such file or directory”我知道我需要制作一个make文件我可以知道如何制作make文件吗
4 回答
无需创建生成文件。如果您按照 Pax 的说明从“所有程序 -> GNUstep -> Shell”启动 MinGW,则只需编译 .m 文件即可。
我的 GNUstep 安装在 c:\GNUstep\GNUstep\System 中。如果你的不同,你应该相应地更改 Foundation.h 的导入。
我这样做了:
- 创建如下所示的 c:\myprogs\obj-c\hello\hello.m:
//------------ 你好.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 命令行上,切换到程序代码所在的目录。(请注意,由于这不是 Unix,因此必须包含 Windows 驱动器号。):
cd /c/myprogs/obj-c/hello
编译程序:
gcc -o hello hello.m -I/c/GNUstep/GNUstep/System/Library/Headers \
-L /c/GNUstep/GNUstep/系统/库/库 -lobjc -lgnustep-base \
-fconstant-string-class=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!
这个问题看起来就像您没有指示 gcc 在哪里可以找到相关的包含文件(即,Foundation/Foundation.h
所在的目录)。
您是在 MinGW 下还是从命令提示符下运行 gcc。你应该All Programs -> GNUstep -> Shell"
在你的开始菜单上有一个 " 来显示这个 shell。
为此的生成文件应该很简单:
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = YourProg
YourProg_OBJC_FILES = source_code.m
include $(GNUSTEP_MAKEFILES)/tool.make
如果您将源代码放在 GNUStep 的主目录中,则无需提供 Foundation 框架的相对位置。
使用诸如 paxdiablo 指定的 makefile 可能是最简单的,因为不是每次都尝试记住一个神秘的命令行,而是设置 makefile 然后从源文件夹调用 make。但是,我在 Windows 下的经验表明 GNUStep 和 Windows,即使使用 shell,也不会使用它来构建,因为它找不到它需要的所有 make 文件 - 添加一个值为 /GNUstep/System/ 的环境变量 GNUSTEP_MAKEFILES Library/Makefiles 并重新启动该 shell,然后它无法找到标准 makefile 的任何错误都应该成为历史。(我曾尝试使用 makefile 的完整路径,但发现这包括特定的 makefile,但在尝试包含更多的 makefile 时失败,因此采用简单的方法并添加环境变量。)