Вся история сначала:
Я рефакторинг некоторого устаревшего кода, который содержит несколько строк:
#pragma comment(lib, "D:\\Some\\absolute\\path\\to\\some\\library.lib")
По причинам, которые я не могу объяснить здесь, мне нужно иметь относительные пути. Было бы неплохо, если бы что-то вроде этого
#pragma comment(lib, "to\\some\\library.lib")
и установка "D:\Some\absolute\path \" в свойствах библиотеки dirs бы сработала, но это не так, и я понимаю, почему.
Мой текущий подход состоит в том, чтобы (i) определить D:\Some\absolute\path как пользовательский макрос SOME_ABSOLUTE_PATH, затем (ii) добавить SOME_ABSOLUTE_PATH # $ (SOME_ABSOLUTE_PATH) в определения препроцессора, что приводит к вызову компилятора
cl ... /D "SOME_ABSOLUTE_PATH#D:\Some\absolute\path\"
Затем я использую это определение в коде, как это
#pragma comment(lib, SOME_ABSOLUTE_PATH ## "to\\some\\library.lib")
который не работает. Глядя на вывод препроцессора, он расширяется до этого
#pragma comment(lib, D:\Some\absolute\path\ ## "to\\some\\library.lib")
что, безусловно, связано с тем, что я не передавал кавычки прямо в каком-то месте. Добавление кавычек в пользовательский макрос (i) не помогает, потому что это приводит к
cl ... /D "SOME_ABSOLUTE_PATH#"D:\Some\absolute\path\""
которые интерпретатор командной строки не может правильно разобрать.
Как вы это делаете? Я также открыт для любого другого решения, выполняющего ограничение, что у меня может быть некоторый относительный путь в директиве pragma.
#define STRINGISE2(X) #X
#define STRINGISE(X) STRINGISE2(X)
#pragma comment(lib, STRINGISE(SOME_ABSOLUTE_PATH) "to\\some\\library.lib")
".\to\\some\\library.lib"
?