【问题标题】:Makefile: variables are not included from other makefileMakefile:变量不包含在其他 makefile 中
【发布时间】: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 可能会让您知道它根本没有被解析,很快。

标签: makefile gnu-make


【解决方案1】:

正如@melpomene 指出的那样,我将文件包含在 C 中,因此将其注释掉!

抱歉浪费了您的时间..

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多