2012-11-06 33 views
11

मुझे हाल ही में जीएनयू से उदाहरण कोड का यह टुकड़ा मिला है जो दस्तावेज बनाता है जो eval function को संदर्भित करता है। मुझे वास्तव में यह पसंद है, लेकिन जब मैंने इसे अपनी मशीन पर परीक्षण करने की कोशिश की (3.81/डेबियन बनाएं), तो यह सब सी फाइलों को संकलित किए बिना सर्वर को जोड़ने का प्रयास कर रहा है ... क्यों? 3.81 अनुकूल नहीं है?जीएनयू 3.81 बनाते हैं: eval function काम नहीं कर रहा है?

शैल उत्पादन:

$ make 
cc  -o server 
cc: no input files 

कोड:

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) 

उत्तर

18

मुझे लगता है कि अगर आप define लाइन से = को दूर यह काम करेगा:

define PROGRAM_template 
    ... 
endef 

मैं इस परीक्षण किया है GNUMake 3.81 के साथ। के लिए यह काम करता है और मैन्युअल में संस्करण नहीं है, मुझे कोई जानकारी नहीं है।

+0

धन्यवाद, यह काम किया। अजीब क्यों वे इसे गलत तरीके से दस्तावेज करते हैं। – user1344105

+14

समस्या यह है कि '=' जीएनयू में जोड़ा गया एक फीचर 3.82 है और जीएनयू मैन्युअल बनाता है (gnu.org पर प्रतिलिपि सहित, जहां Google अधिकतर लोगों को भेज देगा) थोड़ी सी संकेत नहीं देता है जब कोई सुविधा विशिष्ट होती है 3.82 तक। Http://www.gnu.org/software/make/manual/html_node/Reading के साथ http://developer.apple.com/library/mac/#documentation/developertools/gnumake/make_3.html#SEC22 (3.81) की तुलना करें -Makefiles.html # रीडिंग-मेकफ़ाइल (3.82) – reinierpost

+0

स्पष्टीकरण के लिए बड़ा धन्यवाद! – user1344105