我想使用common.mk文件来定义公共变量,并将此文件包含在其他Makefile中,但是在第一个示例中,我做不到,所以我认为我误会了一些东西。
这是Makefile:
CC=gcc
CFLAGS=-g -Wall
LIB_FLAGS=-L/usr/local/lib/ -lcgreen
BUILDDIR=$(CURDIR)/build
SRC=$(wildcard *.c)
export BUILDDIR
export CFLAGS
export LIB_FLAGS
#include common.mk # HERE I INCLUDE THE common.mk where OBJ is defined
unittests: dir externals $(OBJ)
@echo "SRC: $(SRC)"
@echo "OBJ: $(OBJ)" # THIS PRINTS OBJ AS EMPTY <------------------------------
$(CC) $(BUILDDIR)/*.o $(LIB_FLAGS) -o $(BUILDDIR)/unittests
$(BUILDDIR)/unittests
externals:
@$(MAKE) -C lib1 -f lib1.mk
dir:
mkdir -p $(BUILDDIR)
这是common.mk文件:
OBJ=$(patsubst %.c, $(BUILDDIR)/%.o, $(notdir $(SRC)))
$(BUILDDIR)/%.o: %.c
@echo "File: "$<
$(CC) -c $(CFLAGS) $< -o $@
clean:
rm -f $(OBJ)
因此,我期望主Makefile中的OBJ变量具有目标文件列表,但它为空,我不明白为什么。它包含common.mk文件是否与将其内容复制到Makefile中一样?
谢谢
答案 0 :(得分:0)
正如@melpomene指出的那样,我要像在C中那样包含文件,因此将其注释掉!
很抱歉浪费您的时间。