[英]Understanding the Term \\\“$$PWD/\\\” in qmake project file
我在qmake项目文件中找到了这一行:
DEFINES += SRCDIR=\\\\\\"$$PWD/\\\\\\"
我知道PWD
-part代表打印工作目录 ,我让我给出SRCDIR
的价值:
std::cout << "SRCDIR :" << SRCDIR << std::end;
我还将变量更改为SRCDIR=$$PWD
但它不起作用。
但是,为什么我们需要一个斜线/
,backslahses \\
和引号"
,以获得PWD
?
qmake
将特别处理引号字符和反斜杠。
您的最终目标是将字符串文字定义为SRCDIR
的扩展。 C ++中的字符串文字包含在双引号中,因此您需要将这些引号作为定义的一部分传递给编译器。
换句话说,你想要相当于:
#define SRCDIR "somedir/"
其中somedir
是当前工作目录,在本例中。 为了达到这个目的,你想要使用\\"
来转义引号(因此它不是由qmake
专门处理的)。它位于字符串的两端。
现在,逃脱反斜杠怎么样, \\\\
? 好吧,这进一步逃脱了shell处理的引用。 当命令
cc -DSRCDIR="somedir/"
传递给shell,引号将被剥离作为shell处理的一部分。 要确保这些引号保留,并定义字符串文字,您需要在此级别使用反斜杠转义它们。 shell将转换为\\"
into "
。 因此,在这种情况下双引号字符的完整转义序列是:
\\\"
此标记出现在已定义字符串的两端。 正斜杠只是使代码中的路径更容易使用; 它消除了添加/
使用路径的任何地方的需要。
shell看到的命令看起来像
cc -DSRCDIR=\"somedir/\"
并且编译器内部的SRCDIR
定义将是一个字符串文字,相当于in-source中的以下定义:
#define SRCDIR "somedir/"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.