2

嗨,我是初学者学习目标 c。我发现一个错误“hello.m:1:34: Foundation/Foundation.h: No such file or directory”我知道我需要制作一个make文件我可以知道如何制作make文件吗

4

4 回答 4

5

无需创建生成文件。如果您按照 Pax 的说明从“所有程序 -> GNUstep -> Shell”启动 MinGW,则只需编译 .m 文件即可。

我的 GNUstep 安装在 c:\GNUstep\GNUstep\System 中。如果你的不同,你应该相应地更改 Foundation.h 的导入。

我这样做了:

  1. 创建如下所示的 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;
}

//------------

  1. 启动 MinGW 外壳。(看上面。)

  2. 在 shell 命令行上,切换到程序代码所在的目录。(请注意,由于这不是 Unix,因此必须包含 Windows 驱动器号。):

    cd /c/myprogs/obj-c/hello

  3. 编译程序:

    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!
于 2009-06-03T18:58:19.343 回答
3

这个问题看起来就像您没有指示 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
于 2009-05-25T04:37:17.577 回答
1

如果您将源代码放在 GNUStep 的主目录中,则无需提供 Foundation 框架的相对位置。

于 2010-02-08T07:37:55.130 回答
0

使用诸如 paxdiablo 指定的 makefile 可能是最简单的,因为不是每次都尝试记住一个神秘的命令行,而是设置 makefile 然后从源文件夹调用 make。但是,我在 Windows 下的经验表明 GNUStep 和 Windows,即使使用 shell,也不会使用它来构建,因为它找不到它需要的所有 make 文件 - 添加一个值为 /GNUstep/System/ 的环境变量 GNUSTEP_MAKEFILES Library/Makefiles 并重新启动该 shell,然后它无法找到标准 makefile 的任何错误都应该成为历史。(我曾尝试使用 makefile 的完整路径,但发现这包括特定的 makefile,但在尝试包含更多的 makefile 时失败,因此采用简单的方法并添加环境变量。)

于 2010-04-29T00:34:44.267 回答