Hei*_*ami 4 c++ gnu makefile conditional-statements
我试图在执行另一个 makefile 之前根据目标列表中的当前目标(当前该列表中只有一个条目)执行命令。
我有这个:
$(LIBS):
ifeq ($@,libname)
my command here
endif
$(MAKE) -C ./lib/$@
Run Code Online (Sandbox Code Playgroud)
问题是,即使ifeq目标名称正确,也不会执行。使用 an$(info $@)可以准确显示库名称,但表达式不会被评估为 true。我想条件条件中自动变量的扩展可能存在问题,所以我尝试使用这样eval的:
$(LIBS):
$(eval CURRENT_LIB := $@)
ifeq ($(CURRENT_LIB),libname)
my command here
endif
$(MAKE) -C ./lib/$@
Run Code Online (Sandbox Code Playgroud)
info 显示该变量现在完全等于 libname,但 ifeq 未执行。当我输入类似的内容时,ifeq (libname,libname)该语句有效,但变量和文本之间的比较不会计算为 true,即使两者相等并且它应该有效。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 $@ $(OBJ)
-include $(DEPFILE)
%.o: %.cpp
$(CC) $(CFLAGS) -c $<
$(CC) -MM -std=c++11 $(SRC) > $(DEPFILE)
libs: $(LIBS)
$(LIBS):
$(eval CURRENT_LIB := $@)
ifeq ($(CURRENT_LIB),libname)
./lib/$(CURRENT_LIB)/configure
endif
$(MAKE) -C ./lib/$@
.PHONY: clean_all
clean_all: clean
$(foreach dir,$(LIBS),$(MAKE) clean -C ./lib/$(dir))
.PHONY: clean
clean:
rm -rf mytarget $(OBJ) $(DEPFILE)
Run Code Online (Sandbox Code Playgroud)
非常感谢!
| 归档时间: |
|
| 查看次数: |
7511 次 |
| 最近记录: |