代码之家  ›  专栏  ›  技术社区  ›  Wim

定义用于生成文件和外壳脚本的变量

  •  2
  • Wim  · 技术社区  · 15 年前

    我想以makefile和shell脚本中都可以包含的形式分发一组构建变量(应该有人将其附加到自己的ldflags中)。

    我现在有一个文件buildflags.conf:

    LDFLAGS_EXTRA="-static -foo -bar"
    

    我希望我的用户在使用makefiles时能够:

    include buildflags.conf
    LDFLAGS+=$LDFLAGS_EXTRA
    

    或者,当他们使用shell脚本时,执行如下操作:

    . buildflags.conf
    gcc myapp.o -o myapp $LDFLAGS_EXTRA
    

    但是,这不起作用,因为bash需要在ldflags的额外定义周围加引号,而make不需要它们。

    有人能解决这个问题吗?我不想维护多个单独的buildFlags文件,尽管从一个定义文件开始并使其适合包含在不同上下文中的一组脚本是可以的。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Ivo    15 年前

    我想说,最简单的解决方案是将包含变量定义的shell脚本包含在您的make配方中(如果您的配方很简单,这很好用):

    target: sources
        . buildflags.conf ; \
        gcc -o $@ $^ $$LDFLAGS_EXTRA
    

    注意额外 $ 在变量用法和两行实际上是一个语句的事实中, ;\ 很重要。

        2
  •  1
  •   Michel Müller    13 年前

    Ivo在他的评论中的解决方案让我想到了另一个同样有效的解决方案,它对makefiles更为规范:

    1)定义 LDFLAGS_EXTRA 就像问题一样

    2)对生成文件中使用的列表进行后处理

    LDFLAGS_EXTRA_POST=$(subst ",,${LDFLAGS_EXTRA})
    

    3)确保仅参考 LDFLAGS_EXTRA_POST 在Makefiles