Как передать переменную среды, содержащую строку и кавычки, через препроцессор в Visual Studio?

0

Вся история сначала:

Я рефакторинг некоторого устаревшего кода, который содержит несколько строк:

#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.

  • 0
    Вы пробовали ".\to\\some\\library.lib" ?
  • 0
    Путь не относится к исходному файлу. Мне просто нужен способ сделать корень переменной пути.
Теги:
string
c-preprocessor
visual-studio-2008

1 ответ

0
Лучший ответ
#define STRINGISE2(X) #X
#define STRINGISE(X) STRINGISE2(X)

#pragma comment(lib, STRINGISE(SOME_ABSOLUTE_PATH) "to\\some\\library.lib")
  • 0
    Это сделало меня на шаг ближе к цели, спасибо. Тем не менее, у меня все еще есть некоторые проблемы с escape-персонажами и т. Д. Но я думаю, что нужно только немного позаботиться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню