Мне нужно изменить очень старый исходный код. Он поставляется с очень длинным Makefile, и я не очень хорошо знаком с Makefile в целом. Он также полагается на предварительную компиляцию, выполняемую старым сервером Informix.
Мне нужно изменить Makefile, чтобы исходный код внутри my_directory
компилировался, включая исходные коды в common_src
.
Вот структура:
- common_src
- my_directory
- Makefile
Файлы .o
должны быть созданы внутри my_directory
.
Имею следующее:
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)
, файл .err, выводимый на этапе перекомпиляции Informix для rwfich.ec
, говорит: 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
но нет кости: я получаю ту же ошибку.
Большое спасибо всем, кто указал мне правильное направление.