ENABLE_EXPORTS

指定可执行文件或共享库是否导出符号。

通常,可执行文件不导出任何符号,因为它就是最终程序。可执行文件可以导出符号供可加载模块使用。如果将此属性设置为 true,CMake 将允许其它目标使用 target_link_libraries() 命令与可执行文件进行“链接”。在所有平台上,都会为链接到可执行文件的目标创建目标级的依赖关系。可加载模块的链接行中的可执行文件处理方式因平台而异。

  • 在基于 Windows 的系统上(包括 Cygwin),会随可执行文件一起创建“导入库”以列出导出的符号。可加载模块链接到导入库以获取符号。

  • 在 macOS 中,可加载模块使用 -bundle_loader 标志链接到可执行文件本身。

  • 在 AIX 上,会随可执行文件一起创建链接器“导入文件”以列出导出的符号,供链接其它目标时导入。可加载模块链接到导入文件以获取符号。

  • 在其它平台上,会对可加载模块进行简单链接,而无需引用可执行文件,因为动态加载器在加载模块时会自动绑定符号。

如果在创建可执行文件目标时设置了该属性,则此属性将由 CMAKE_EXECUTABLE_ENABLE_EXPORTS 变量的值进行初始化。如果未设置 CMAKE_EXECUTABLE_ENABLE_EXPORTS,则出于向后兼容性的原因,会改用 CMAKE_ENABLE_EXPORTS 变量对该属性进行初始化。有关共享库目标的备用初始化行为,请参见下文。

在版本 3.27 中新增: 要在 macOS 上链接共享库或在任何 Apple 平台上链接共享框架,可以使用链接器导入文件,而不是实际的共享库。这些链接器导入文件也称为基于文本的存根,并具有 .tbd 文件扩展名。

这些链接器导入文件的生成及其消耗由此属性控制。如果在共享库目标上将此属性设置为 true,CMake 将为库生成 .tbd 文件。然后,链接到共享库目标的其它目标将在链接时使用此 .tbd 文件,而不是链接到共享库二进制文件。

注意

出于向后兼容性原因,如果 XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS 目标属性或 CMAKE_XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS 变量设置为 false,此属性将被忽略。

对于共享库目标,如果在创建目标时设置过,此属性将由 CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS 变量的值进行初始化。