首页 > 解决方案 > CMake:add_library()生成的变量?

问题描述

我正在恢复一个有 10 年历史的 C++ 项目,该项目具有一个顶级 CMakeLists.txt 文件,该文件将 BUILD_TYPE_SDK 变量设置为 STATIC 或 SHARED,以及一个具有以下行的库级 CMakeLists.txt:

    ADD_LIBRARY(foo ${BUILD_TYPE_SDK} ${PROJECT_SRCS} ${PROJECT_INCS})

我有一个 C++ 头文件 [为清晰起见重新格式化],它正在测试:

    #ifdef foo_EXPORTS
    #      define FOO_DLL_DEF __declspec(dllexport)
    #else
    #   ifdef foo_STATIC
    #      define FOO_DLL_DEF
    #   else
    #      define FOO_DLL_DEF __declspec(dllimport)
    #   endif
    #endif

这一切似乎都有效,但我无法找到声明或定义 foo_EXPORTS 的位置。

foo_EXPORTS 是作为 ADD_LIBRARY() 调用的副作用而创建的变量吗?如果是这样,我在哪里可以找到其他生成变量的列表?

标签: cmake

解决方案


IIRC,该定义在构建目标foo_EXPORTS时由 CMake 添加。foo这样,export当您构建库以及import从另一个目标中使用它时,它被设置为。

有一个特殊的CMake 模块可以轻松生成此类标头。


推荐阅读