Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C makefile中的ESQL INFORMIX预编译步骤:错误-33042无法打开输入文件_C_Makefile_Informix_Embedded Sql - Fatal编程技术网

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

C makefile中的ESQL INFORMIX预编译步骤:错误-33042无法打开输入文件,c,makefile,informix,embedded-sql,C,Makefile,Informix,Embedded Sql,我必须修改一些非常旧的源代码。它附带了一个很长的Makefile,一般来说我对Makefile不是很熟悉。它还依赖于旧Informix服务器的预编译步骤 我需要修改Makefile,以便通过将源代码包含在common\u src中来编译my\u目录中的源代码 结构如下: - common_src - my_directory - Makefile .o文件应在my\u目录中生成 我有以下资料: COMMONSRC=$(HOME)/common_src ESQL= esql ESQL

我必须修改一些非常旧的源代码。它附带了一个很长的Makefile,一般来说我对Makefile不是很熟悉。它还依赖于旧Informix服务器的预编译步骤

我需要修改Makefile,以便通过将源代码包含在
common\u src
中来编译
my\u目录中的源代码

结构如下:

- common_src
- my_directory
   - Makefile
.o
文件应在
my\u目录中生成

我有以下资料:

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."
但没有骰子:我也会犯同样的错误


非常感谢任何能为我指出正确方向的人。

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

另外,您的makefile是不完整的,因为您没有向我们显示
RWOBJ
的值,并且您有一个打字错误(您定义
COMMON\u HFILES
,但您指的是
$(COMMON\u HFILE)
。由于make没有抱怨这一点,我假设打字错误只存在于您的问题中,而不是您的实际makefile中(这是剪切粘贴更好的另一个原因)

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

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

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


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

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

另外,您的makefile是不完整的,因为您没有向我们显示
RWOBJ
的值,并且您有一个打字错误(您定义
COMMON\u HFILES
,但您指的是
$(COMMON\u HFILE)
。由于make没有抱怨这一点,我假设打字错误只存在于您的问题中,而不是您的实际makefile中(这是剪切粘贴更好的另一个原因)

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

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

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


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

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

$(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."
$(RWFOBJ):$(OBJDIR)/%.o:$(COMMONSRC)/%.ec$(COMMON_HFILES)
@echo-n“$<:预编译”
@$(ESQL)$(ESQLFLAGS)$(CFLAGS)$<>$*。错误2>&1
@echo-n“编译”
@$(CC)$(CFLAGS)-c$*.c>>$*.err 2>&1
@rm$*.c
@回音“好。”

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

$(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."
$(RWFOBJ):$(OBJDIR)/%.o:$(COMMONSRC)/%.ec$(COMMON_HFILES)
@echo-n“$<:预编译”
@$(ESQL)$(ESQLFLAGS)$(CFLAGS)$<>$*。错误2>&1
@echo-n“编译”
@$(CC)$(CFLAGS)-c$*.c>>$*.err 2>&1
@rm$*.c
@回音“好。”

谢谢您的回复。我已经根据您的建议修改了问题。您是对的,我应该提供更多详细信息。我有-I$(COMMONSRC)标志,但是错误发生在Informix服务器的预编译步骤中……好吧,您必须告诉“Informix服务器”在“预编译步骤”中在哪里找到头。很可能您必须向
ESQLFLAGS
变量添加一些内容。如果您不知道需要添加什么,并且Informix服务器预编译器的文档没有告诉您,那么这是一个关于Informix服务器预编译器的问题,而不是关于makefiles的问题,因此您应该在问题中添加适当的标记,并修改sum试图吸引具有正确知识类型的人(例如,这不是一个“Makefile错误”)……不幸的是,这不是我!:)我明白了,是的,你是对的。谢谢你在任何情况下抽出时间!谢谢你的回答。我已经根据你的建议修改了这个问题。你是对的,我应该提供更多细节。我有-I$(COMMONSRC)标志,但是错误发生在Informix服务器的预编译步骤中……好吧,你必须告诉“informix服务器”在“预编译步骤”期间在何处查找头。可能您必须向
ESQLFLAGS
变量添加一些内容。如果您不知道需要添加什么,并且informix服务器预编译器的文档没有告诉您,那么这是一个关于informix服务器预编译器的问题,而不是关于m的问题