Каталог моего проекта монтируется через NFS.Из каталога, в котором он монтируется, я звоню make -f msh/Makefile cd=msh
.(msh - это мое монтирование.) cd
- это переменная в Makefile, которая предшествует исходным файлам.Это прекрасно работает с исходными файлами прямо под cd
.Однако, если исходные файлы находятся в подкаталоге в пределах cd
, Make завершается неудачно, говоря, что не существует правила для создания этой цели.Он не завершится ошибкой, если я вызову Make из моего монтирования.
Это мой Makefile.
CC?=gcc
CFLAGS:=-Wall -Werror -D_POSIX_C_SOURCE=200112L $(CFLAGS)
cd?=.
objects_nix=if/tty.o
objects:=sub.o if.o $(objects_nix)
ifdef SO
CFLAGS+=-fPIC
bin=libmsh.so
else
bin=libmsh.a
endif
.PHONY : clean
$(bin) :
libmsh.a : $(objects)
$(AR) -r -c -s $@ $(objects)
libmsh.so : $(objects)
@echo
@echo If you have resumed compilation after not having used the SO flag,
@echo you should run make clean.
@echo
$(LD) $(LDFLAGS) -shared -o $@ $(objects)
test : $(cd)/test.c $(bin)
ifdef SO
$(CC) $(CFLAGS) -I$(cd) $(LDFLAGS) -L. -lmsh -Wl,-rpath,. -o $@ $(cd)/test.c
else
$(CC) $(CFLAGS) -I$(cd) $(LDFLAGS) -o $@ $(cd)/test.c $(bin)
endif
%.o : $(cd)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
clean :
rm -f libmsh.so libmsh.a
rm -f $(objects)
rm -f test.o test
Я попытался создать другое правило для подкаталога, и это работает.Но я бы хотел, чтобы он работал только с одним правилом.