11
최근에 eval 함수를 참조하는 GNU make 문서에서 예제 코드를 발견했습니다. 정말 맘에 들지만 컴퓨터에서 테스트 해 보았을 때 (3.81/Debian 만들기), 먼저 C 파일을 컴파일하지 않고 서버를 연결하려고합니다 ... 왜? make 3.81과 호환되지 않습니까?GNU make 3.81 : 평가 기능이 작동하지 않습니까?
쉘 출력 :
$ make
cc -o server
cc: no input files
코드 :이 테스트 한
define PROGRAM_template
...
endef
: 난 당신이 define
줄에서 =
를 제거하면 작동 생각
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)
감사합니다. 왜 그들이 잘못 문서화하는지 이상합니다. – user1344105
문제는'='가 GNU make 3.82에 추가 된 기능이고 GNU make 매뉴얼 (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 # Reading-Makefiles (3.82) – reinierpost
설명에 큰 감사드립니다! – user1344105