如何在编译时在依赖项文件中添加用户定义的依赖项

时间:2016-10-17 14:09:18

标签: c makefile

我将这些文件放在同一个文件夹中:

a.c
b.c
common.c
liba.mk
libb.mk
指定编译" a.c" & .c" 并归档目标文件。 " libb.mk" 正在" b.c" " common.c&上做类似的工作#34;

我的问题是," common.c" 出现在两个makefile上。如何在此添加依赖规则?我希望当我制作" liba.mk" 然后制作" libb.mk" &#34 ; 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)

我想我需要在生成依赖项文件时附加额外的依赖项。但是对依赖文件执行文件处理似乎很愚蠢。有没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

从你的评论我现在明白你必须重新编译common.c,因为它使用不同的编译器标志(-DLIBB-DLIBA),因为common.o的依赖关系( ie common.c和可能的头文件)没有改变它没有重新编译common.c

要实现这一目标,您可以使用:

pre_action:
    rm common.o
    mkdir libb          # or liba

我的make有点生疏但我相信这总是会编译common.c