簡體   English   中英

編譯時如何在依賴文件中添加用戶定義的依賴項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM