Bash 定义在makefile和Shell脚本中使用的变量

Bash 定义在makefile和Shell脚本中使用的变量,bash,variables,makefile,Bash,Variables,Makefile,我想以一种既可以包含在Makefile中也可以包含在shell脚本中的形式分发一组构建变量(有人应该将其附加到LDFLAGS中) 我现在有一个buildflags.conf文件: LDFLAGS_EXTRA="-static -foo -bar" 我希望我的用户在使用makefiles时能够: include buildflags.conf LDFLAGS+=$LDFLAGS_EXTRA 或者,当他们使用shell脚本时,执行以下操作: . buildflags.conf gcc myapp

我想以一种既可以包含在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需要在我的LDU额外定义周围加引号,而make不需要它们


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

我认为最简单的解决方案是只在make配方中包含包含变量定义的shell脚本(如果你的食谱很简单,这很管用):


请注意变量用法中额外的
$
,以及两行实际上是一条语句的事实,
;\
非常重要。

Ivo在其评论中的解决方案将我带到了另一条同样有效且更规范的Makefiles语句:

1) 定义问题中的
LDFLAGS\u EXTRA

2) 对列表进行后期处理以在Makefiles中使用

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

3) 确保在Makefiles中只引用
LDFLAGS\u EXTRA\u POST
,谢谢,这看起来是个好主意。我怀疑大多数用户会使用makefiles,所以我宁愿让shell脚本承担额外的负担。有没有办法让make将其变量导出到shell脚本?可以使用不同的shell脚本读取配置吗?如果是这样,只需执行类似于
eval`awk-F='{printf”%s=\%s\“\n',$1,$2}'
Perfect的操作即可!同时,我通过在我的打包脚本中构建单独的版本,使用与您类似的
awk
命令,解决了这个问题。
LDFLAGS_EXTRA_POST=$(subst ",,${LDFLAGS_EXTRA})