我在寫一個通用的生成文件來構建靜態庫。它似乎運作良好,到目前爲止,除了排隊叫SED:在makefile中使用sed;如何逃避變量?
# Generic makefile to build a static library
ARCH = linux
CFLAGS = -O3 -Wall
SOURCES = src
BUILD_DIR = build/$(ARCH)
TARGET = $(BUILD_DIR)/libz.a
CFILES = $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.c))
OBJECTS = $(addprefix $(BUILD_DIR)/,$(CFILES:.c=.o))
# Pull in the dependencies if they exist
# http://scottmcpeak.com/autodepend/autodepend.html
-include $(OBJECTS:.o=.dep)
default: create-dirs $(TARGET)
$(TARGET): $(OBJECTS)
$(AR) -rc $(TARGET) $^
$(BUILD_DIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o [email protected]
$(CC) -M $(CFLAGS) $*.c > $(BUILD_DIR)/$*.tmp
sed s/.*:/$(BUILD_DIR)\\/$*.o:/ $(BUILD_DIR)/$*.tmp > $(BUILD_DIR)/$*.dep
@rm $(BUILD_DIR)/$*.tmp
.PHONY: create-dirs
create-dirs:
@for p in $(SOURCES); do mkdir -p $(BUILD_DIR)/$$p; done
.PHONY: clean
clean:
rm -fr $(BUILD_DIR)
sed的使用與其中對象實際上是完整路徑替換目標文件的路徑/名稱。例如在本例中,'src/foo.o:'替換爲'build/linux/src/foo.o:'。 $(BUILD_DIR)和$ *替換字符串在展開時都包含正斜槓 - 我如何將它們傳遞給sed?
注意:這可能已經在這裏回答過了,但我至今無法將這些答案應用於我的具體問題!
我們該如何做一些像'sed s〜$ {PLANET}〜bar〜'的東西?由於某些原因,不能在Makefile中擴展 – 2015-09-12 01:38:06