Понимание термина \\\ & quot; $$ PWD / \\\ & quot; в файле проекта qmake

Я нашел эту строку в файле проекта qmake:

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

Я знаю что PWDчасть означает распечатать рабочий каталог и я позволил
дай мне ценность SRCDIR:

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

Я также изменил переменную на SRCDIR=$$PWD но это не сработает.

Но зачем нам слеш /задники \ и кавычки " чтобы получить PWD?

2

Решение

qmake специально обрабатывает символы кавычек и обратную косую черту.

Ваша конечная цель — определить строковый литерал как расширение SRCDIR, Строковые литералы в C ++ содержатся в двойных кавычках, поэтому вам нужны эти кавычки, чтобы они передавались в компилятор как часть определения.

Другими словами, вы хотите эквивалент:

#define SRCDIR "somedir/"

где somedir текущий рабочий каталог, в этом примере. Чтобы достичь этого, вы хотите избежать кавычки (так что это не обрабатывается специально qmake) с помощью \", Это стоит на обоих концах строки.

А как насчет сбежавшего обратного слеша, \\? Что ж, это еще больше ускользает от цитаты из обработки оболочки. Когда команда

cc -DSRCDIR="somedir/"

передается в оболочку, кавычки будут удалены как часть обработки оболочки. Чтобы эти кавычки оставались и определяли строковый литерал, вам нужно экранировать их с обратной косой чертой и на этом уровне. Оболочка будет конвертировать \" в ", Таким образом, полная escape-последовательность для символа двойной кавычки в этом случае:

\\\"

Этот токен появляется на обоих концах определенной строки. Прямая косая черта просто облегчает использование пути внутри кода; это устраняет необходимость добавлять / везде, где вы используете путь.

Команда, которую видит оболочка, будет выглядеть

cc -DSRCDIR=\"somedir/\"

и определение SRCDIR внутри компилятора будет строковый литерал, эквивалентный следующему определению в источнике:

#define SRCDIR "somedir/"
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]