【问题标题】:Makefile condition fails for defined variable已定义变量的 Makefile 条件失败
【发布时间】:2017-05-07 04:10:32
【问题描述】:

我正在为具有多个模块的应用程序编写 makefile (GNU make)。更准确地说,对于每个模块,我都有一个 makefile。另外,我有一个主makefile,它调用每个模块的makefile。我一直在尝试从这些 makefile 中提取出随处需要的几个变量。我在主 makefile 的开头包含了一个 init.mk 文件,其中包含以下内容:

export OS = linux

ifeq ($(OS),linux)
    export SHELL := /bin/bash
else ifeq ($(OS),windows)
    export SHELL := cmd
else
    export SHELL :=
endif

当我使用它运行 make 时,我收到错误 127,因为比较测试失败并且 SHELL 变量设置为空。如果我在else 部分添加/bin/bash,make 不会失败。

为什么没有正确比较 OS 变量?

问候

【问题讨论】:

  • 根据操作系统以特殊方式处理SHELL,例如在Windows上它甚至可能是ignore anything you say
  • export OS = linux 行的末尾有多余的空格吗?
  • 我有空格和评论
  • @MasScientist 如果你想写一个答案,我会接受的。这就是问题所在。

标签: makefile gnu-make


【解决方案1】:

让变量赋值去掉前导空格,但不要去掉尾随空格:这些都包含在变量的值中。

所以:

export OS =   linux     
                   ^^^^^

如果有尾随空格,无论是单独的还是后面带有注释的,都会导致变量包含空格。例如上面的赋值OS的值是linux后跟5个空格,而不仅仅是linux

您可以确保手动避免尾随空格(使用具有编辑 makefile 模式的编辑器在这里非常有用)或使用 strip 函数:

ifeq ($(strip $(OS)),linux)
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 2021-10-13
    • 2014-05-12
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多