2010-08-06 82 views
2

我想以一种既可以包含在Makefile中也可以包含在shell脚本中的形式发布一组构建变量(应该附加到LDFLAGS) 。定义用于Makefile和Shell脚本的变量

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

LDFLAGS_EXTRA="-static -foo -bar" 

我希望我的用户能够,当他们正在使用的makefile:

include buildflags.conf 
LDFLAGS+=$LDFLAGS_EXTRA 

或者,当他们”重新使用shell脚本,做这样的事情:

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

然而,这并不工作,因为需要的bash在我LDFLAGS_E报价XTRA定义,而make不需要它们。

任何人都有解决方案吗?我不想维护多个独立的buildflags文件,尽管一组脚本从单个定义文件开始,并使其适合包含在不同的上下文中会很好。

回答

2

我想说的最简单的解决方法就是包括包含在你的化妆配方中的变量定义(如果你的食谱很简单能正常工作)的shell脚本:

target: sources 
    . buildflags.conf ; \ 
    gcc -o [email protected] $^ $$LDFLAGS_EXTRA 

注意的额外$可变用法和两条线实际上是一条语句的事实,;\非常重要。

+0

谢谢,这看起来是个好主意。我怀疑大多数用户会使用makefile,所以我宁愿在shell脚本上增加额外的负担。有没有任何方法将其变量导出到shell脚本中? – Wim 2010-08-06 10:14:57

+0

使用读取配置的其他shell脚本可以接受吗?如果是这样,只需要做一些类似于'eval \'awk -F ='{printf“%s = \”%s \“\ n”,$ 1,$ 2}' Ivo 2010-08-06 13:17:23

+0

完美!在此期间,我通过在包装脚本中构建单独的版本,使用类似于您的'awk'命令解决了这个问题。 – Wim 2010-08-06 13:51:02

1

伊沃在他的评论的解决方案已经给我带来了一个又一个的作品以及和更规范的Makefile文件:

1)定义LDFLAGS_EXTRA如问题

2)后处理的列表中使用Makefile中

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

3)确保仅供参考LDFLAGS_EXTRA_POST Makefile中