d.Candela (dervish_candela) wrote,
d.Candela
dervish_candela

Categories:

добавить *пустой* макрос в проект

вот например такой классический код, который я не хочу/не могу менять:


#if defined WIN32
#ifdef SUPER_API_EXPORTS
#define SUPER_API __declspec(dllexport)
#else
#define SUPER_API __declspec(dllimport)
#endif
#elif defined __linux
#define SUPER_API __attribute__ ((visibility ("default")))
#endif

class SUPER_API AwesomeApi {
...
}


если я хочу использовать код AwesomeApi напрямую, не собирая библиотеку, а просто добавив файлы в свой проект, мне будет мешать токен «SUPER_API», а просто так добавить в дефайны SUPER_API не прокатит!

[10.09.2019 15:52:44] я всегда думал что пустой дефайн ни во что не разворачивается в коде и таким образом никак не должен мешать. но это неверно.
[10.09.2019 15:52:50] By default, the value associated with a symbol is 1. For example, /Dname is equivalent to /Dname=1.
https://docs.microsoft.com/en-us/cpp/build/reference/d-preprocessor-definitions?redirectedfrom=MSDN&view=vs-2019

таким образом, нужно специально определить макрос SUPER_API как пробел:
для Microsoft Visual Studio (свойства проекта .vcxproj, C++ -> Препроцессор -> свойство Определения препроцессора):
SUPER_API= ; (пробел, затем точка с запятой!)
для QMake (синтаксис .pro-файла):
DEFINES += SUPER_API=" "
для MSVS, голая команданая строка компилятора cl.exe:
-DSUPER_API= (NB: обязательно дополнительный пробел после знака равенства!)
Tags: c++, программирование - это 52% религии
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments