Kısa bir süre önce bu örnek kod dosyasını, eval işlevine başvuran GNU make belgelerinden buldum. Gerçekten çok hoşuma gidiyor, ama makinemde test etmeye çalıştığımda (3.81/Debian yap), tüm bunları önce c dosyalarını derlemeden sunucuya bağlamaya çalışıyor ... neden? 3.81 uyumlu değil mi?GNU make 3.81: eval işlevi çalışmıyor mu?
Kabuk çıkışı:
$ make
cc -o server
cc: no input files
Kodu: Bunu test ettik
define PROGRAM_template
...
endef
: Sana define
satırından =
kaldırırsanız o işe yarayacak
PROGRAMS = server client
server_OBJS = server.o server_priv.o server_access.o
server_LIBS = priv protocol
client_OBJS = client.o client_api.o client_mem.o
client_LIBS = protocol
# Everything after this is generic
.PHONY: all
all: $(PROGRAMS)
define PROGRAM_template =
$(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
ALL_OBJS += $$($(1)_OBJS)
endef
$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
$(PROGRAMS):
$(LINK.o) $^ $(LDLIBS) -o [email protected]
clean:
rm -f $(ALL_OBJS) $(PROGRAMS)
Teşekkürler, bu işe yaradı. Garip neden yanlış bir şekilde belgelediler. – user1344105
Sorun, '=', GNU make 3.82'de eklenmiş bir özellik ve GNU make manual (Google'ın çoğu kişiyi göndereceği gnu.org'daki kopya da dahil olmak üzere), bir özellik belirli olduğunda en ufak bir ipucu vermez 3,82'ye. Http://developer.apple.com/library/mac/#documentation/developertools/gnumake/make_3.html#SEC22 (3.81) http://www.gnu.org/software/make/manual/html_node/Reading ile karşılaştır -Makefiles.html # Okuma-Makefiles (3.82) – reinierpost
Açıklama için büyük teşekkürler! – user1344105