【问题标题】:CMake escaping variable for configure用于配置的 CMake 转义变量
【发布时间】:2012-06-27 14:29:09
【问题描述】:

目前我正在使用以下语法设置 RPATH:

SET(CMAKE_INSTALL_RPATH   "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")

它适用于使用 CMake 的二进制构建。 问题是它不适用于我使用 CMake 使用其自动配置脚本构建的第三方二进制文件。我正在使用以下命令进行配置:

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,${CMAKE_INSTALL_RPATH}\"
                  --prefix=${CMAKE_INSTALL_PREFIX}
                  )

第三个路径configure生成的Makefile如下:

" -Wl,-rpath,':RIGIN/../lib' -lstdc++"

我想我需要正确地转义${CMAKE_INSTALL_RPATH}。 我还尝试使用以下选项:

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,\$\$ORIGIN/../lib\"
                  --prefix=${CMAKE_INSTALL_PREFIX}
                  )

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,\\$\$ORIGIN/../lib\"
                   --prefix=${CMAKE_INSTALL_PREFIX}
                  )

但没有任何效果。

转义值的正确方法是什么?

【问题讨论】:

    标签: linux cmake


    【解决方案1】:

    add_custom_target 接受 VERBATIM 参数。根据文档:

    如果给定VERBATIM,那么命令的所有参数都将是 为构建工具正确转义,以便调用的命令 接收每个参数不变。请注意,一级转义是 在add_custom_target 之前仍被 CMake 语言处理器使用 甚至看到了争论。建议使用VERBATIM,因为它可以启用 正确的行为。当VERBATIM 没有给出时,行为是平台 具体是因为没有保护工具专用的特殊 字符。

    【讨论】:

      【解决方案2】:

      如果我没看错的话,你是想避免 shell 解释 $ 变量...如果是这样,使用单引号 (') 而不是双引号 (")。shell 不会解释包裹在单引号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 2011-11-09
        • 2019-10-04
        相关资源
        最近更新 更多