我是从CMake手动生成QtCreator项目文件(.pro)。
在某些时候,我需要将$${VAR}
写入.pro文件。所以我需要逃避$
字符和{
}
。
我发现了如何保护$
标志,以下是我的工作方式:
macro( QMAKE_ADD_LINE_TO_VAR var line )
set( ${var} "${${var}}\n${line}\n" )
endmacro()
set(PRO_CONTENT "#Generated by CMake scripts!")
# Adding many other stuff here....
QMAKE_ADD_LINE_TO_VAR(PRO_CONTENT "TARGET = \\$\\$VAR" )
file(WRITE file.pro ${PRO_CONTENT} )
这会生成file.pro:
#Generated by CMake scripts!
...
TARGET = $$VAR
但我怎么能产生?我无法找到如何逃避荣誉:
#Generated by CMake scripts!
...
TARGET = $${VAR}
我试过了:
QMAKE_ADD_LINE_TO_VAR(PRO_CONTENT "TARGET = \\$\\$\\{VAR\\}" )
QMAKE_ADD_LINE_TO_VAR(PRO_CONTENT "TARGET = \\$\\$\{VAR\}" )
没有成功......
答案 0 :(得分:2)
macro
调用似乎消耗了一个级别的转义。众所周知bug,但CMake开发人员不想修复它(出于后向兼容性原因)。
最初,在CMake中没有必要逃避{
字符;只有${
组合才有特殊含义。所以你只需要逃避$
标志。由于macro
调用,您需要将其转义两次:
QMAKE_ADD_LINE_TO_VAR(PRO_CONTENT "TARGET = \\\$\\\${VAR}" )
您可以将QMAKE_ADD_LINE_TO_VAR
实现为函数:
function( QMAKE_ADD_LINE_TO_VAR var line )
set( ${var} "${${var}}\n${line}\n" PARENT_SCOPE)
endfunction()
在这种情况下,转义将被简化:
QMAKE_ADD_LINE_TO_VAR(PRO_CONTENT "TARGET = \$\${VAR}" )