饿狼战役: 在 hrl 文件中, include 另一个 hrl 文件 的问题

13 views
Skip to first unread message

老范

unread,
Aug 16, 2009, 9:39:18 AM8/16/09
to erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
karl ma 在 schema.hrl 中增加了

-include("ebLogger.hrl").


在/erlbattle   目录下用  各种make 命令 , 都会报错: 找不到 ebLogger.hrl.

改成 -include("core/engine/ebLogger.hrl").  后能够正确编译

但是感觉这样不妥:

1. 毕竟ebLogger.hrl  和 schema.hrl 是在同一个目录中的,加上路径感觉很怪。
2. 其他 *.erl 文件都可以直接包含schema.hrl 文件,不需要加路径,这就变成hrl 文件include 和 erl 文件include 方式不同。
3. 如果在core/engine 目录用  c(erlbattle) 方式编译,这种写法又会报错。

高手指点下,这个问题有没有更好的解决方式? 还是说我们就杜绝在hrl 文件中 include 另外一个hrl 文件?


Regards


老范





Zoom.Quiet

unread,
Aug 16, 2009, 9:41:36 AM8/16/09
to fanyu...@gmail.com, erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
2009/8/16 老范 <fanyu...@gmail.com>:

> karl ma 在 schema.hrl 中增加了
>
> -include("ebLogger.hrl").
>
>
> 在/erlbattle   目录下用  各种make 命令 , 都会报错: 找不到 ebLogger.hrl.
>
> 改成 -include("core/engine/ebLogger.hrl").  后能够正确编译
>
> 但是感觉这样不妥:
>

同问!

> 1. 毕竟ebLogger.hrl  和 schema.hrl 是在同一个目录中的,加上路径感觉很怪。
> 2. 其他 *.erl 文件都可以直接包含schema.hrl 文件,不需要加路径,这就变成hrl 文件include 和 erl 文件include
> 方式不同。
> 3. 如果在core/engine 目录用  c(erlbattle) 方式编译,这种写法又会报错。
>
> 高手指点下,这个问题有没有更好的解决方式? 还是说我们就杜绝在hrl 文件中 include 另外一个hrl 文件?
>
>
> Regards
>
>
> 老范
>
>
>
>
>
>
> >
>

--
http://zoomquiet.org 人生苦短,Pythonic!-)
流程是对先前蠢行的内在反应! ~ Clay Shirky

Evan Tao

unread,
Aug 16, 2009, 8:39:44 PM8/16/09
to zoom....@gmail.com, fanyu...@gmail.com, erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
刚才看了一下。觉得不是hrl中include别的hrl的问题。

hwh的程序里面自己使用了同名的schema.hrl,造成跟引擎同名。
因此他包含自己的hrl时,使用的是-include("schema.hrl"),而包含引擎的hrl时,使用的是-include("engine/schemal.hrl")。

我尝试着,将hwh的hrl改名,然后所有include自己的hrl的地方修改,再将-include("engine/schemal.hrl")中的engine去掉。同时修改他的emakefile,将{i,
"core"}改成{i, "core/engine"},编译,通过。

因此,开始编译不过,应该是原先include的时候,使用了不同路径下的同名文件造成的。
因为要避免同名,所以在{i, "core"}里面的包含路径里面就没有engine。这样,引擎中的hrl中包含的eblogger.hrl就找不到了。

2009/8/16 Zoom.Quiet <zoom....@gmail.com>:

Wenhai Huang

unread,
Aug 16, 2009, 9:25:33 PM8/16/09
to evan...@gmail.com, zoom....@gmail.com, fanyu...@gmail.com, erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
win32,在/erlbattle下编译
无论是包含ebLogger.hrl还是包含core/engine/ebLogger.hrl
所有代码编译均无问题。
所以很纳闷你们指的是什么?

2009/8/17 Evan Tao <evan...@gmail.com>

老范

unread,
Aug 16, 2009, 9:34:05 PM8/16/09
to erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
我是在 /erlbattle   下面, 用  nmake test   或者  进erlang shell 后用  make:all()   进行编译,都会报  找不到  ebLogger.hrl 错误。

core/engine/schema.hrl:2: can't find include file "ebLogger.hrl"

hwh 你能编译过去是否有其他特殊的.profile 配置或者环境配置?


后来将他改成 -include("core/engine/ebLogger.hrl").    后编译通过。   现在svn 中是能够通过的版本。




Regards

老范



2009/8/17 Wenhai Huang <hwh...@gmail.com>

老范

unread,
Aug 16, 2009, 9:45:19 PM8/16/09
to erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
测试了, Evan Tao 说的是对的。 我已经按照这个方案修改了 hwh 代码, 提交上去了。


Regards

老范


2009/8/17 Evan Tao <evan...@gmail.com>

LOGOLS

unread,
Aug 16, 2009, 9:57:10 PM8/16/09
to fanyu...@gmail.com, erlang...@googlegroups.com, ECUG~erlang中文用户组, 恶狼战役论坛
我想你需要rebuild target.mk

2009/8/17 老范 <fanyu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages