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 变量的值初始化,如果该变量在创建目标时已设置。