【发布时间】:2018-11-19 19:10:39
【问题描述】:
我想使用 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中吗?
谢谢
【问题讨论】:
-
#include common.mk # HERE I INCLUDE THE common.mk where OBJ is defined不包含任何内容。它以#开头,所以它只是一个评论。 -
@melpomene 谢谢..我习惯了 C 并没有注意到它..因此浪费了两个小时!好尴尬..哎哟!
-
如果您使用具有某种 makefile 编辑模式的编辑器,它将以不同的颜色显示 cmets。通常,它在处理 TAB 与空格方面也会做得更好。对于调试,将
$(info ...)函数添加到您的makefile 中以在不同时间显示变量值等会很有帮助。将这些添加到common.mk可能会让您知道它根本没有被解析,很快。