Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ <;LIBNAME>_出口来自哪里?_C++_Visual Studio_Dll_Cmake - Fatal编程技术网

C++ <;LIBNAME>_出口来自哪里?

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

我在MSVC环境下看到了许多C++头文件:
#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的情况下生成类似的头。