C makefile中的ESQL INFORMIX预编译步骤:错误-33042无法打开输入文件
我必须修改一些非常旧的源代码。它附带了一个很长的Makefile,一般来说我对Makefile不是很熟悉。它还依赖于旧Informix服务器的预编译步骤 我需要修改Makefile,以便通过将源代码包含在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
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的问题