【发布时间】:2014-02-13 17:54:53
【问题描述】:
显然,这不是一个微不足道的问题,因为到目前为止我还没有通过谷歌搜索或在 SO 中搜索找到解决方案。无论如何,如果这是重复的,我很抱歉发布它。
我正在编写一个用于配置 cmake 构建的 bash 函数。我将我的 cmake 参数保存在这样的变量中:
CMAKEARGS=".. "`
`"-DCMAKE_BUILD_TYPE=${build_type} "`
`"-DBoost_INCLUDE_DIR=${boost_dir} "`
`"-DGCL=ON "`
`"-DENABLE_PERFORMANCE_METERS=OFF "`
`"-DENABLE_CACHING=ON "`
`"-DENABLE_CUDA_STREAMS=ON "`
`"-DENABLE_LOGGING=OFF "
在某些时候,我必须添加以下参数:-DCUDA_NVCC_FLAGS="-I${mpi_path}/include -ccbin=$(which g++)"
如果如您所见,有引号 " 显然我必须转义(这不是问题),以及两个“子参数”之间的空格会造成很多麻烦。我尝试了以下方法:
CMAKEARGS+="'-DCUDA_NVCC_FLAGS=\"-I${mpi_path}/include -ccbin=$(which g++)\"' "
最后CMAKEARGS的内容是:... -DCUDA_NVCC_FLAGS="-I/opt/cray/mpt/6.2.1/gni/mpich2-cray/81/include -ccbin=/opt/gcc/4.8.2/bin/g++" ...,看起来还不错。如果我将它复制粘贴到我的 shell 中,它就可以正常工作。但是如果我使用
cmake $CMAKEARGS
在我的函数中,它认为 -ccbin=/opt/gcc/4.8.2/bin/g++" (不是只有一个引用")是源目录并且失败了。我怎样才能逃脱这个空间? 我试着在它前面放一个\,用单引号、双引号包围整个论点……
提前致谢
【问题讨论】:
-
那些真的是你所有选项字符串的反引号吗?这不会很顺利......
-
为什么?我跟着stackoverflow.com/questions/7729023/…的第二个答案,效果很好。我用它来保持左侧缩进。我曾经在行尾添加反斜杠,但这阻止了我缩进下一个。
-
因为反引号解释其中的文本,尝试将其作为命令执行,捕获该命令的输出,并用该输出替换整个反引号括起来的序列。最后我知道,
-DCMAKE_BUILD_TYPE=${build_type}不是可执行命令,所以它会失败...