3

目前我正在使用以下语法设置 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}
                  )

第三个路径配置生成的 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}
                  )

但没有任何效果。

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

4

2 回答 2

1

add_custom_target接受一个VERBATIM论点。根据文档:

如果VERBATIM给出,则命令的所有参数都将为构建工具正确转义,以便调用的命令接收每个参数不变。add_custom_target 请注意,在看到参数之前,CMake 语言处理器仍然使用一级转义。建议使用 ,VERBATIM因为它可以实现正确的行为。未给出时VERBATIM,行为是特定于平台的,因为没有对特定于工具的特殊字符的保护。

于 2014-05-02T09:51:16.997 回答
-1

如果我没看错,那么您希望避免 shell 解释 $ 变量...如果是这样,请使用单引号 (') 而不是双引号 (")。shell 不会解释用单引号括起来的变量。

于 2012-06-27T14:36:50.720 回答