【问题标题】:API macro for making C++ library用于制作 C++ 库的 API 宏
【发布时间】:2020-08-24 04:05:35
【问题描述】:

我是 C++ 初学者。

我创建了一个 CMake 库项目, 我添加了 2 个库,一个叫做 马赛克(共享)和马赛克_s(静态)。

问题是如何使用宏来自动为 __declspec(dllexport) 设置宏 在构建共享库时,在构建静态库时将其设置为空。

【问题讨论】:

    标签: c++ cmake shared-libraries static-libraries


    【解决方案1】:

    在你的make文件中定义一个符号,它会告诉你它是否被共享,然后你可以使用预处理器,比如

    #ifndef SHARED
    #define EXPORT
    #else
    #define EXPORT __declspec(dllexport)
    #endif
    

    然后在你的代码中你会拥有

    EXPORT whatever_you_are_exporting
    

    如果你在 make 文件中定义了 SAHRED,那么 EXPORT 将是 __declspec(dllexport),如果你没有,那么 EXPORT 将一无所有。

    【讨论】:

    • 谢谢,我找到了受您建议启发的解决方案。我使用 CMake,并检测是否定义了 CMake 变量 MOSAIC_SHARED,如果已定义,则添加一个分片库并定义 MOSAIC_SHARED 宏。然后我检测到 MOSAIC_SHARED 是在我的公共标头中定义的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多