[英]How to add user defined dependency item in dependency file while compiling
我將這些文件放在同一文件夾中:
a.c
b.c
common.c
liba.mk
libb.mk
指定“ liba.mk”來編譯“ ac”和“ common.c”並歸檔目標文件。 “ libb.mk”正在“ bc”和“ common.c”上進行類似的工作
我的問題是, “ common.c”出現在兩個makefile中。 如何為此添加依賴關系規則? 我希望當我制作“ liba.mk”然后再制作“ libb.mk”時 , “ libb.mk”將重新編譯“ common.c” 。
這是我在liba.mk上的內容:
SRC_C = a.c common.c
SRC_O = $(patsubst %.c,%.o,$(SRC_C))
OBJ_LIST = $(addprefix liba/,$(patsubst %.c,%.o,$(SRC_C)))
DEPENDENCY_LIST = $(addprefix liba/,$(patsubst %.c,%.d,$(SRC_C)))
all: pre_action liba
.PHONY: pre_action
pre_action:
mkdir liba
.PHONY: liba
liba: $(SRC_O)
$(AR) rvs liba/liba.a $(OBJ_LIST)
$(SRC_O): %.o : %.c
$(CC) -DLIBA -c $< -o $@
$(CC) -DLIBA -c $< -MM -MT $@ -MF liba/$(patsubst %.o,%.d,$@)
cp $@ liba/$(notdir $@)
-include $(DEPENDENCY_LIST)
.PHONY: clean
clean:
rm -rf liba
rm -f $(SRC_O)
libb.mk具有類似的內容:
SRC_C = b.c common.c
SRC_O = $(patsubst %.c,%.o,$(SRC_C))
OBJ_LIST = $(addprefix libb/,$(patsubst %.c,%.o,$(SRC_C)))
DEPENDENCY_LIST = $(addprefix libb/,$(patsubst %.c,%.d,$(SRC_C)))
all: pre_action libb
.PHONY: pre_action
pre_action:
mkdir libb
.PHONY: libb
libb: $(SRC_O)
$(AR) rvs libb/libb.a $(OBJ_LIST)
$(SRC_O): %.o : %.c
$(CC) -DLIBB -c $< -o $@
$(CC) -DLIBB -c $< -MM -MT $@ -MF libb/$(patsubst %.o,%.d,$@)
cp $@ libb/$(notdir $@)
-include $(DEPENDENCY_LIST)
.PHONY: clean
clean:
rm -rf libb
rm -f $(SRC_O)
我想我在生成依賴文件時需要附加額外的依賴項。 但是對依賴文件執行文件處理似乎很愚蠢。 有沒有更好的解決方案呢?
從您的評論中,我現在知道您必須重新編譯common.c
因為它使用了不同的編譯器標志( -DLIBB
與-DLIBA
),並且由於common.o
的依賴項(即common.c
和可能的頭文件)沒有改變它沒有重新編譯common.c
。
為此,您可以使用:
pre_action:
rm common.o
mkdir libb # or liba
我的make
有點生銹,但是我相信這會一直編譯common.c
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.