다른 makefile이 실행되기 전에 대상 목록 (현재 해당 목록의 항목 하나)에서 현재 대상에 따라 명령을 실행하려고합니다.GNU make ifeq 비교가 작동하지 않습니다.
내가 이것을 가지고 다음 ifeq
대상 이름이 올바른지 경우에도 실행되지 않습니다
$(LIBS):
ifeq ([email protected],libname)
my command here
endif
$(MAKE) -C ./lib/[email protected]
문제가. $(info [email protected])
을 사용하면 정확히 libname이 표시되지만 표현식은 true로 평가되지 않습니다. 나는 조건에서 자동 변수의 확장에 문제가 그래서 난이 같은 eval
를 사용하여 시도가 어쩌면 생각했다
$(LIBS):
$(eval CURRENT_LIB := [email protected])
ifeq ($(CURRENT_LIB),libname)
my command here
endif
$(MAKE) -C ./lib/[email protected]
정보는 변수가 지금 정확히 libname에 해당된다는 표시하지만는 ifeq은 excuted되지 않습니다 . ifeq (libname,libname)
과 같이 입력하면 구문이 작동하지만 변수와 텍스트의 비교는 두 변수가 동일하고 작동해야한다고 판단하지 않습니다. GNU make 버전은 4.1입니다.
무엇이 여기에 있습니까?
완벽한 메이크 :
CC := g++
CFLAGS := -v -std=c++0x -pthread -Wall -g -O3
OBJ := mycode.o
OBJ += moreobjects.o
#more objects in here
LIBS = libname
.PHONY: libs $(LIBS)
SRC = $(OBJ:%.o=%.cpp)
DEPFILE := .depend
mytarget: libs $(OBJ)
$(CC) $(CFLAGS) -o [email protected] $(OBJ)
-include $(DEPFILE)
%.o: %.cpp
$(CC) $(CFLAGS) -c $<
$(CC) -MM -std=c++11 $(SRC) > $(DEPFILE)
libs: $(LIBS)
$(LIBS):
$(eval CURRENT_LIB := [email protected])
ifeq ($(CURRENT_LIB),libname)
./lib/$(CURRENT_LIB)/configure
endif
$(MAKE) -C ./lib/[email protected]
.PHONY: clean_all
clean_all: clean
$(foreach dir,$(LIBS),$(MAKE) clean -C ./lib/$(dir))
.PHONY: clean
clean:
rm -rf mytarget $(OBJ) $(DEPFILE)
대단히 감사합니다!
왜'libname'에 대한 명시적인 규칙을 추가하지 않으시겠습니까? – user657267
그래, 그게 당연히 일할거야, 난 그 생각조차하지 않았다, 고마워! 이것이 왜 작동하지 않는지 파악하는 것은 여전히 흥미로울 것입니다. – HeidiSalami