我有一个小程序来编译c源然后链接它们,我为它定义了一个函数,然后在链接阶段,程序在我检查并且它们存在时找不到目标文件。 当我第二次运行make时,该功能只能链接它们。
define compile
$(foreach s,$(SRC),gcc s -o $(addprefix $(OBJECT_DIR)/, $(patsubt %.c.%.o,$(notdir $(s))));)
gcc -shared -o sharedlib.so $(wildcard $(OBJECT_DIR)/*.o)
endef
all:
$(call compile)
我试图回显$(OBJECT_DIR)
的值,并且在第一次运行make时它是空的,它只在第二次运行make时填充了适当的值
答案 0 :(得分:1)
这与你的设计截然不同,但我认为这是要走的路:
OBJ := $(patsubst %.c, $(OBJECT_DIR)/%.o, $(notdir $(SRC)))
vpath %.c $(dir $(SRC))
sharedlib.so: $(OBJ)
gcc -shared -o $@ $^
$(OBJ): $(OBJECT_DIR)/%.o: %.c
gcc s -o $@ $<