C++ <;LIBNAME>_出口来自哪里?
我在MSVC环境下看到了许多C++头文件:C++ <;LIBNAME>_出口来自哪里?,c++,visual-studio,dll,cmake,C++,Visual Studio,Dll,Cmake,我在MSVC环境下看到了许多C++头文件: #ifdef somelib_EXPORTS #define DLLEXPORTS __declspec(dllexport) #else #define DLLEXPORTS __declspec(dllimport) #endif \u导出惯例从何而来 它是Visual Studio的默认宏吗?或者它是由CMake生成的 我找不到任何关于这个公约的文件 "美国出口公约"从何而来? 这是一个通用的编码指南,有助于确保在构建DLL时,.h文件可以#i
#ifdef somelib_EXPORTS
#define DLLEXPORTS __declspec(dllexport)
#else
#define DLLEXPORTS __declspec(dllimport)
#endif
\u导出
惯例从何而来
它是Visual Studio的默认宏吗?或者它是由CMake生成的
我找不到任何关于这个公约的文件
"美国出口公约"从何而来?
这是一个通用的编码指南,有助于确保在构建DLL时,.h文件可以#include
d并由DLL的用户使用
名称DLLEXPORTS
是特定于项目的。它可以由CMake、qmake或手动生成。我不认为VisualStudio可以生成它们,至少我还没有看到
如果您的项目中有10个DLL,那么最终将使用10个这样的宏。例如,您可能有
实用工具\u DLL\u导出
,消息传递\u DLL\u导出
,内核\u DLL\u导出
,等等。它可能是由Visual Studio附带的默认项目模板生成的。但这只是惯例,没有其他意义。你可以用任何你想要的名字。更一般地看:与CMake无关,这个约定在它出现之前就已经被使用了。CMake
文档说,CMake
中的默认宏是LIBNAME\u EXPORT
,但是很容易更改默认值,或者库可以在不使用GenerateExportHeader的情况下生成类似的头。