【发布时间】:2020-09-20 13:02:27
【问题描述】:
我正在 Windows 上使用 cmake 和 c++ 构建一个 dll 文件。我的项目由几个头文件组成,一个完整的头文件将包含在不同的 c++ 项目中。较大的头文件如下所示:
#include "header1.h"
#include "header2.h"
#include "header3.h"
...
我读到我必须使用__declspec(dllimport) 和__declspec(dllexport),所以我使用了一些这样的 ifdef 语句:
#ifdef _WIN32
# ifdef EXPORT
# define API __declspec(dllexport)
# else
# define API __declspec(dllimport)
# endif
#elif
# define API
#endif
我的问题是:我必须把它放在每个头文件中,还是我可以以某种方式为整个头文件做这件事?例如,像这样:
#include API "header1.h"
#include API "header2.h"
#include API "header3.h"
...
(不起作用,但有类似的东西吗?)
【问题讨论】:
-
您必须为每个要导出/导入的符号使用
API宏。这是因为预处理器和#include指令没有按您预期的方式工作。当预处理器找到有效的#include指令时,它基本上直接插入文件的预处理头文件内容来代替#include指令。 -
和套件博客文章:blog.kitware.com/…
标签: c++ dll cmake shared-libraries