我将这些文件放在同一个文件夹中:
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)
我想我需要在生成依赖项文件时附加额外的依赖项。但是对依赖文件执行文件处理似乎很愚蠢。有没有更好的解决方案?
答案 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
。