Макросы в #pragma

237
30 декабря 2017, 04:05

Есть библиотека, которая компилируется под разные версии Visual C++ в разных режимах - динамическая, статическая, 64 и 32 разряда.

Имя самого файла имеет вид

lib@####$$
@    - в случае динамической библиотеки равно d (можно привязать к опции /MD), 
       иначе отсутствует
#### - версия компилятора, что в макросе _MSC_VER
$$   - 64, если макрос _WIN64 равен 1, иначе отсутствует 

А теперь сам вопрос - я хочу написать конструкцию, которая бы сама включала нужную мне библиотеку. Я могу взять, например

#pragma comment(lib, "lib180064")

Но это для конкретного сочетания. Для произвольной библиотеки и вариантов компиляции можно расписать сложную ветвящуюся структуру из #if и #else, но хочется сделать проще, особенно с учетом того, что для новой версии и нового _MSC_VER опять ветвить придется.

Это можно как-то упростить? Собирать этот #pragma comment в зависимости от того, чем компилирую? Я никак сообразить не могу.

Answer 1

Т.к. #pragma comment(lib) принимает строку, можно её собрать в зависимости от условий:

#define STRING2(x) #x
#define STRING(x) STRING2(x)
#ifdef _WIN64
#define LIB_64 "64"
#else
#define LIB_64 ""
#endif
#ifdef _DLL
#define LIB_DLL "@"
#else
#define LIB_DLL ""
#endif
#pragma comment(lib, "lib" LIB_DLL STRING(_MSC_VER) LIB_64 ".lib")
READ ALSO
Логика конструктора при наследовании

Логика конструктора при наследовании

Почему логика языка С++ позволяет производному классу пользоваться конструктором БЕЗ параметров базового класса, НО НЕ позволяет пользоваться...

391
Потоковая передача видео на сервер

Потоковая передача видео на сервер

ЗдравствуйтеПрошарил весь гугл, но так и не понял даже в какую сторону идти

239
из римских в десятичные

из римских в десятичные

Делаю конвертер из римских цифр в десятичные и вот который час танцую с бубном перед ошибкой, но как то никак

225
Android.Java.Sqlite.Не находит столбец в таблице

Android.Java.Sqlite.Не находит столбец в таблице

Не находит столбец в таблице и выдаёт такую ошибку :

249