首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >makefile中的ESQL INFORMIX预编译步骤:错误-33042无法打开输入文件

makefile中的ESQL INFORMIX预编译步骤:错误-33042无法打开输入文件
EN

Stack Overflow用户
提问于 2020-11-18 20:35:00
回答 2查看 85关注 0票数 1

我不得不修改一些非常旧的源代码。它有一个非常长的Makefile文件,我对Makefile一般不是很熟悉。它还依赖于旧Informix服务器的预编译步骤。

我需要修改Makefile,以便通过在common_src中包含源代码来编译my_directory中的源代码。

结构是这样的:

代码语言:javascript
复制
- common_src
- my_directory
   - Makefile

应该在my_directory内部生成.o文件。

我有以下几点:

代码语言:javascript
复制
COMMONSRC=$(HOME)/common_src

ESQL=   esql
ESQLFLAGS=  -e

CFLAGS= -DGTKDVPT \
    -I$(INFORMIXDIR)/incl/esql \
    -I$(COMMONSRC)

OFILES= rwfich.o
HFILES= sqlheader.h

COMMON_HFILES=  $(HFILES:%.h=$(COMMONSRC)/%.h)

gcd:        bin/gcd


bin/gcd:    $(LIBGC) gcd.o $(LIBOUTILS)
            @echo -n "Link:     bin/gcd "
            @$(CC) $(CFLAGS) gcd.o $(LIBGC) \
            $(SQLLIBS) $(LNKOPT) -obin/gcd_lnk > gcdlnk.err 2>&1
            @touch bin/gcd
            @mv -f bin/gcd bin/oldgcd
            @mv -f bin/gcd_lnk bin/gcd
            @echo "Ok."

$(LIBGC):   $(RWFOBJ) 
    @echo -n "$(LIBGC)     :    "
    @rm -f $(LIBGC)
    @echo -n "Construction ...  "
    @ar rc $(LIBGC) 
    @echo "Ok."

$(RWFOBJ):  $(OBJDIR)/%.o : $(COMMONSRC)/%.ec $(COMMON_HFILES)
            @echo -n "$<     :  Precompilation  "
            @$(ESQL) $(ESQLFLAGS) $< > $*.err 2>&1
            @echo -n "Compilation  "
            @$(CC) $(CFLAGS) -c $*.c >> $*.err 2>&1
            @rm $*.c
            @echo "Ok."

当我运行Makefile,它到达$(RWFOBJ)时,rwfich.ec的Informix重新编译步骤输出的.err文件显示为:esqlc: "/home/my_directory/rwfich.ec", line 7: Error -33042: Cannot open input file 'sqlheader.h'. 1 error(s) found

有人知道这是怎么回事吗?我甚至尝试过使用完整路径对.h文件进行硬编码:

代码语言:javascript
复制
$(RWFOBJ):  $(OBJDIR)/%.o : $(COMMONSRC)/%.ec $(HOME)/common_src/sqlheader.h

但是没有骰子:我得到了同样的错误。

非常感谢能为我指明正确方向的人。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 05:14:13

我通过向Informix预编译行添加$(CFLAGS)解决了这个问题,如下所示:@$(ESQL) $(ESQLFLAGS) $(CFLAGS) $< > $*.err 2>&1,因此总目标如下所示:

代码语言:javascript
复制
$(RWFOBJ):  $(OBJDIR)/%.o : $(COMMONSRC)/%.ec $(COMMON_HFILES)
        @echo -n "$<     :  Precompilation  "
        @$(ESQL) $(ESQLFLAGS) $(CFLAGS) $< > $*.err 2>&1
        @echo -n "Compilation  "
        @$(CC) $(CFLAGS) -c $*.c >> $*.err 2>&1
        @rm $*.c
        @echo "Ok."
票数 0
EN

Stack Overflow用户

发布于 2020-11-18 21:23:41

在寻求帮助时,请始终包括您调用的make命令和您获得的错误输出,并将其剪切并粘贴到您的问题中(使用适当的格式),而不是转述。即使错误的确切文本中的细微差别也会产生很大的不同。

此外,您的makefile是不完整的,因为您没有向我们展示RWOBJ的值是什么,并且您有一个拼写错误(您定义了COMMON_HFILES,但您引用了$(COMMON_HFILE)。既然make不会抱怨这一点,我假设拼写错误只存在于你的问题中,而不是存在于你的实际makefile中(这是剪切和粘贴更好的另一个原因)。

此外,请包括您正在使用的操作系统和make的版本。

在这种情况下,你得到的“无法打开输入文件”的错误不是来自make,而是来自你的编译器。Make可以很好地找到您的头文件,但是它会调用编译器,而您没有告诉编译器在哪里可以找到头文件。

您需要在编译行中添加-I$(COMMONSRC)选项(假设您使用的是POSIX编译器,比如GCC或clang)。

您还没有提供足够的有关完整makefile的信息,我们无法建议您将该选项放在何处,但请查看是否有包含其他-I选项的make变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64893247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档