了解 qmake 项目文件中的术语 \\\ "$$PWD/\"



我在qmake项目文件中找到了这一行:

DEFINES += SRCDIR=\"$$PWD/\"

我知道PWD -部分代表打印工作目录,我让给我SRCDIR的值:

std::cout << "SRCDIR :" << SRCDIR << std::end;

我也将变量更改为 SRCDIR=$$PWD,但它将不起作用。

但是,为什么我们需要斜线/,Backslahses 和引号标记"才能获得PWD

qmake将专门处理引用字符和背斜线。

您的最终目标是将字符串定义为SRCDIR的扩展。C 中的字符串文字包含在双引号中,因此您需要这些引号将其作为定义的一部分使其贯穿编译器。

换句话说,您想要:

#define SRCDIR "somedir/"

在此示例中, somedir是当前的工作目录。为了实现这一目标,您想逃脱报价(因此,qmake不专门处理)使用"。这位于字符串的两端。

现在,逃脱的后斜线, \呢?好吧,这进一步从外壳处理中逃脱了报价。当命令

cc -DSRCDIR="somedir/"

传递给外壳,引号将作为外壳处理的一部分剥离。为了确保这些引号保留并定义字符串文字,您也需要在此级别的后斜线上逃脱它们。外壳将将"转换为"。因此,在这种情况下,双引号字符的完整逃生序列是:

\"

这个令牌出现在定义字符串的两端。前斜线仅使使用代码内的路径变得更加容易。它消除了在您使用路径的任何地方添加/的需求。

外壳看到的命令看起来像

cc -DSRCDIR="somedir/"

以及编译器内部的SRCDIR的定义将是字符串文字,相当于以下定义:

#define SRCDIR "somedir/"

最新更新