普遍逃脱美元符号

时间:2018-10-04 07:48:54

标签: shell makefile dollar-sign

我正在从事嵌入式项目,该项目由我自己的代码以及第三方库和可执行文件组成。为了一致地构建所有部件,我编写了一个脚本,该脚本设置了用于交叉编译的环境变量(CC,CXX,CFLAGS等)。其中,它设置LDFLAGS将rpath标志传递给链接器。 rpath值包含$ORIGIN令牌,该令牌不得扩展,并且必须由链接器查看并按原样写入输出二进制文件。然后,我使用脚本设置的环境来构建几个需要的第三方项目。这些项目使用不同的构建系统(make,CMake或其他)。因此,也许还因为以不同方式编写的构建脚本,美元符号的扩展方式有所不同。也就是说,无论我如何进行转义,我在不同的项目中都会得到不同的结果(例如$$ ORIGIN,RIGIN,空字符串),但是我从来没有设法在所有二进制文件中获得相同的$ORIGIN值。是否存在一种通用的逃避美元符号的方法,以便它至少在品牌和外壳上都可以使用,但可以组合使用?

2 个答案:

答案 0 :(得分:0)

这就是我终于解决了这个问题的方式。 除了为我的平台构建所需的先前环境变量外,我还添加了两个:

ORIGIN=$ORIGIN
O=$$O

前者用于解决shell扩展问题,后者用于解决makefile扩展问题。使用此修复程序,变量将自行解决。 是的,这看起来不是理想的解决方案,看起来更像是黑客,但是到目前为止,它仍然有效,这使我避免为自己使用的每个第三方项目调整构建环境。

答案 1 :(得分:0)

我遇到了相同的扩展问题,这是bash脚本的改编版本。

<div class="navbar navbar-dark bg-dark fixed-top navbar-expand-md">
    <div class="container">
        <a class="navbar-brand" href="#">Brand</a>
        <button type="button" class="navbar-toggler" data-toggle="collapse" data-target=".navbar-collapse">☰</button>
        <div class="collapse navbar-collapse justify-content-end">
            <ul class="nav navbar-nav">
                <li class="active nav-item"><a href="#" class="nav-link">Home</a>
                </li>
                <li class="nav-item"><a href="#about" class="nav-link">About</a>
                </li>
                <li class="nav-item"><a href="#contact" class="nav-link">Contact</a>
                </li>
            </ul>
        </div>
    </div>
</div>