我不得不修改一些非常旧的源代码。它有一个非常长的Makefile文件,我对Makefile一般不是很熟悉。它还依赖于旧Informix服务器的预编译步骤。
我需要修改Makefile,以便通过在common_src中包含源代码来编译my_directory中的源代码。
结构是这样的:
- common_src
- my_directory
- Makefile应该在my_directory内部生成.o文件。
我有以下几点:
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文件进行硬编码:
$(RWFOBJ): $(OBJDIR)/%.o : $(COMMONSRC)/%.ec $(HOME)/common_src/sqlheader.h但是没有骰子:我得到了同样的错误。
非常感谢能为我指明正确方向的人。
发布于 2020-11-19 05:14:13
我通过向Informix预编译行添加$(CFLAGS)解决了这个问题,如下所示:@$(ESQL) $(ESQLFLAGS) $(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."发布于 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变量。
https://stackoverflow.com/questions/64893247
复制相似问题