理解qmake项目文件中的术语\\\“$$ PWD / \\\”

时间:2016-06-20 10:25:33

标签: c++ qt qmake pwd project-files

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

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

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

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

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

但为什么我们需要使用斜杠/,后退\和引号"来获取PWD

1 个答案:

答案 0 :(得分:2)

qmake将专门处理引号字符和反斜杠。

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

换句话说,你想要相当于:

#define SRCDIR "somedir/"

其中somedir是当前工作目录,在此示例中。为实现此目的,您希望使用qmake来转义引号(因此\"不特别处理它)。它位于字符串的两端。

现在,转义反斜杠\\怎么样?好吧,这进一步逃脱了shell处理的引用。当命令

cc -DSRCDIR="somedir/"

传递给shell,引号将作为shell处理的一部分被剥离。要确保这些引号保留,并定义字符串文字,您需要在此级别使用反斜杠转义它们。 shell会将\"转换为"。因此,在这种情况下双引号字符的完整转义序列是:

\\\"

此标记出现在已定义字符串的两端。正斜杠只是使代码中的路径更容易使用;它消除了在使用路径的任何地方添加/的需要。

shell看到的命令看起来像

cc -DSRCDIR=\"somedir/\"

并且编译器中SRCDIR的定义将是一个字符串文字,相当于in-source中的以下定义:

#define SRCDIR "somedir/"