qmake
будет обрабатывать символы персонажей и обратную косую черту специально.
Ваша конечная цель - иметь строковый литерал, определяемый как расширение SRCDIR
. Строковые литералы в C++ содержатся в двойных кавычках, поэтому вам нужны эти кавычки, чтобы передать их компилятору в рамках определения.
Другими словами, вы хотите эквивалент:
#define SRCDIR "somedir/"
где somedir
это текущий рабочий каталог, в данном примере. Чтобы достичь этого, вы хотите избежать цитаты (поэтому он не обрабатывается специально qmake
), используя \"
. Это стоит на обоих концах строки.
Теперь, как насчет сбежавшей обратной косой черты, \\
? Ну, это еще больше ускользает от цитаты из обработки оболочки. Когда команда
cc -DSRCDIR="somedir/"
передается оболочке, котировки будут удалены как часть обработки оболочки. Чтобы убедиться, что эти кавычки остаются, и задайте строковый литерал, вам также нужно избежать их с помощью обратного слэша на этом уровне. Оболочка преобразует \"
в "
. Таким образом, полная последовательность для двойной кавычки в данном случае:
\\\"
Этот маркер появляется на обоих концах определенной строки. Прямой слэш просто упрощает использование пути внутри кода; это устраняет необходимость добавления /
везде, где вы используете путь.
Команда, которая видит оболочка будет выглядеть
cc -DSRCDIR=\"somedir/\"
и определение SRCDIR
внутри компилятора будет строковым, что эквивалентно следующему определению в исток:
#define SRCDIR "somedir/"
. .. потому что qmake нарушается, когда дело доходит до цитирования –