cmake - 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() 调用的副作用而创建的变量吗?如果是这样,我在哪里可以找到其他生成变量的列表?
解决方案
IIRC,该定义在构建目标foo_EXPORTS
时由 CMake 添加。foo
这样,export
当您构建库以及import
从另一个目标中使用它时,它被设置为。
有一个特殊的CMake 模块可以轻松生成此类标头。
推荐阅读
- c++11 - 非静态二维数组的正确初始化程序是什么?
- generics - 如果您只有一个 KClass 对象,那么用具体的类型参数调用一个有趣的东西?
- linux - 在 debian 9 上安装 docker
- bash - Gnuplot 使用 bash 二维数组
- kubernetes - Kubernetes 中 Pod 的资源分配
- php - 使用 PHP 回显完整 json 的编码段
- java - 一次处理两个相邻元素的集合(使用流)
- python - 如何使用管道在子进程之间正确传递信息?
- ios - Firebase 未在 Swift / iOS 中显示 microsoft.com 的登录页面
- azure-devops - 在 Azure DevOps 中自动化多个构建/发布