UseSWIG¶
此文件为 SWIG
提供支持。假定 FindSWIG
模块已加载。
CMake 命令¶
为 SWIG
定义了以下命令
- swig_add_library¶
在 3.8 版本中添加。
使用给定的名称和指定的语言定义 swig 模块
swig_add_library(<name> [TYPE <SHARED|MODULE|STATIC|USE_BUILD_SHARED_LIBS>] LANGUAGE <language> [NO_PROXY] [OUTPUT_DIR <directory>] [OUTFILE_DIR <directory>] SOURCES <file>... )
使用
swig_add_library
命令创建的目标与使用add_library()
命令创建的目标具有相同的功能,因此这些目标可以与任何期望目标的命令一起使用(例如target_link_libraries()
)。在 3.13 版本中变更: 当策略
CMP0078
设置为NEW
时,此命令使用指定的<name>
创建目标。否则,旧的行为将选择不同的目标名称并将其存储在SWIG_MODULE_<name>_REAL_NAME
变量中。在 3.15 版本中变更: 备用库名称(例如,使用
OUTPUT_NAME
属性设置)将传递给Python
和CSharp
包装器库。在 3.21 版本中变更: 当策略
CMP0122
设置为NEW
时,生成的库对CSharp
语言使用标准命名约定。否则,将应用旧的行为。注意
对于多配置生成器,此模块不支持由
SWIG
生成的特定于配置的文件。所有构建配置都必须生成相同的源文件。注意
对于 Makefile 生成器,如果对于某些源文件,
USE_SWIG_DEPENDENCIES
属性为FALSE
,则swig_add_library
不跟踪文件依赖项,因此对于需要swig
生成的文件存在的目标,需要依赖<name>_swig_compilation
自定义目标。其他生成器可能依赖于将由 SWIG 生成的源文件。TYPE
SHARED
、MODULE
和STATIC
具有与add_library()
命令相同的语义。如果指定了USE_BUILD_SHARED_LIBS
,则库类型将为STATIC
或SHARED
,具体取决于BUILD_SHARED_LIBS
变量的当前值是否为ON
。如果未指定类型,则将使用MODULE
。LANGUAGE
指定目标语言。
在 3.1 版本中添加: Go 和 Lua 语言支持。
在 3.2 版本中添加: R 语言支持。
在 3.18 版本中添加: Fortran 语言支持。
NO_PROXY
在 3.12 版本中添加。
阻止生成包装器层 (swig
-noproxy
选项)。OUTPUT_DIR
在 3.12 版本中添加。
指定语言特定文件的写入位置 (swig
-outdir
选项)。如果未给出,将使用CMAKE_SWIG_OUTDIR
变量。如果两者都未指定,则默认值取决于UseSWIG_MODULE_VERSION
变量的值,如下所示如果
UseSWIG_MODULE_VERSION
为 1 或未定义,则输出将写入到CMAKE_CURRENT_BINARY_DIR
目录。如果
UseSWIG_MODULE_VERSION
为 2,则将使用专用目录。此目录的路径可以从SWIG_SUPPORT_FILES_DIRECTORY
目标属性中检索。
OUTFILE_DIR
在 3.12 版本中添加。
指定将放置生成的源文件的输出目录名称 (swig
-o
选项)。如果未指定,将使用SWIG_OUTFILE_DIR
变量。如果两者都未指定,则改为使用OUTPUT_DIR
或CMAKE_SWIG_OUTDIR
。SOURCES
库的源文件列表。扩展名为
.i
的文件将被识别为SWIG
工具的源文件。其他文件将以标准方式处理。在 3.14 版本中添加: 可以通过指定变量
SWIG_SOURCE_FILE_EXTENSIONS
来覆盖此行为。
注意
如果
UseSWIG_MODULE_VERSION
设置为 2,则强烈建议在指定OUTPUT_DIR
选项或CMAKE_SWIG_OUTDIR
变量时,使用目标唯一的专用目录。输出目录内容在目标构建过程中被擦除,因此为了防止目标之间的干扰或丢失其他重要文件,每个目标都应该有其自己的专用输出目录。
源文件属性¶
模块文件上的源文件属性必须在调用 swig_add_library
命令之前设置,以指定 SWIG 的特殊行为并确保生成的文件将接收所需的设置。
CPLUSPLUS
在 c++ 模式下调用 SWIG。例如
set_property(SOURCE mymod.i PROPERTY CPLUSPLUS ON) swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
SWIG_FLAGS
在 3.12 版本中已弃用: 已替换为以下细粒度属性。
将自定义标志传递给 SWIG 可执行文件。
INCLUDE_DIRECTORIES
、COMPILE_DEFINITIONS
和COMPILE_OPTIONS
在 3.12 版本中添加。
向 SWIG 编译器添加自定义标志,并具有与属性
INCLUDE_DIRECTORIES
、COMPILE_DEFINITIONS
和COMPILE_OPTIONS
相同的语义。USE_TARGET_INCLUDE_DIRECTORIES
在 3.13 版本中添加。
如果设置为
TRUE
,则目标属性INCLUDE_DIRECTORIES
的内容将转发到SWIG
编译器。如果设置为FALSE
,则目标属性INCLUDE_DIRECTORIES
将被忽略。如果未设置,则将考虑目标属性SWIG_USE_TARGET_INCLUDE_DIRECTORIES
。GENERATED_INCLUDE_DIRECTORIES
、GENERATED_COMPILE_DEFINITIONS
和GENERATED_COMPILE_OPTIONS
在 3.12 版本中添加。
向生成的 C/C++ 源代码添加自定义标志。它们将分别填充生成的 C/C++ 文件的属性
INCLUDE_DIRECTORIES
、COMPILE_DEFINITIONS
和COMPILE_OPTIONS
。DEPENDS
在 3.12 版本中添加。
指定源文件的其他依赖项。
USE_SWIG_DEPENDENCIES
在 3.20 版本中添加。
如果设置为
TRUE
,则隐式依赖项由swig
工具本身生成。此属性仅对 Makefile、Ninja、Xcode
和 Visual Studio 生成器有意义。默认值为FALSE
。在 3.21 版本中添加: 添加了对
Xcode
生成器的支持。在 3.22 版本中添加: 添加了对 Visual Studio 生成器 的支持。
SWIG_MODULE_NAME
指定目标语言中模块的实际导入名称。如果无法从源文件自动扫描或与模块文件基本名称不同,则这是必需的。例如
set_property(SOURCE mymod.i PROPERTY SWIG_MODULE_NAME mymod_realname)
在 3.14 版本中变更: 如果策略
CMP0086
设置为NEW
,则-module <module_name>
传递给SWIG
编译器。OUTPUT_DIR
在 3.19 版本中添加。
指定考虑的源文件的语言特定文件的写入位置 (swig
-outdir
选项)。如果未指定,则应用定义输出目录的其他方法(请参阅swig_add_library()
命令的OUTPUT_DIR
选项)。OUTFILE_DIR
在 3.19 版本中添加。
指定将放置生成的源文件的输出目录 (swig
-o
选项),用于考虑的源文件。如果未指定,将使用OUTPUT_DIR
源文件属性。如果两者都未指定,则应用定义输出文件目录的其他方法(请参阅swig_add_library()
命令的OUTFILE_DIR
选项)。
目标属性¶
可以设置目标库属性以将相同的配置应用于所有 SWIG 输入文件。
SWIG_INCLUDE_DIRECTORIES
、SWIG_COMPILE_DEFINITIONS
和SWIG_COMPILE_OPTIONS
在 3.12 版本中添加。
这些属性将应用于所有 SWIG 输入文件,并具有与目标属性
INCLUDE_DIRECTORIES
、COMPILE_DEFINITIONS
和COMPILE_OPTIONS
相同的语义。set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD) swig_add_library(mymod LANGUAGE python SOURCES mymod.i) set_property(TARGET mymod PROPERTY SWIG_COMPILE_DEFINITIONS MY_DEF1 MY_DEF2) set_property(TARGET mymod PROPERTY SWIG_COMPILE_OPTIONS -bla -blb)
SWIG_USE_TARGET_INCLUDE_DIRECTORIES
在 3.13 版本中添加。
如果设置为
TRUE
,则目标属性INCLUDE_DIRECTORIES
的内容将转发到SWIG
编译器。如果设置为FALSE
或未定义,则目标属性INCLUDE_DIRECTORIES
将被忽略。可以通过指定源文件属性USE_TARGET_INCLUDE_DIRECTORIES
来覆盖此行为。SWIG_GENERATED_INCLUDE_DIRECTORIES
、SWIG_GENERATED_COMPILE_DEFINITIONS
和SWIG_GENERATED_COMPILE_OPTIONS
在 3.12 版本中添加。
这些属性将分别填充所有生成的 C/C++ 文件的属性
INCLUDE_DIRECTORIES
、COMPILE_DEFINITIONS
和COMPILE_FLAGS
。SWIG_DEPENDS
在 3.12 版本中添加。
向所有 SWIG 输入文件添加依赖项。
只读目标属性¶
以下目标属性是输出属性,可用于获取有关 SWIG
接口编译生成的支持文件的信息。
SWIG_SUPPORT_FILES
在 3.12 版本中添加。
此输出属性列出了 SWIG 编译期间生成的包装器文件。
set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD) swig_add_library(mymod LANGUAGE python SOURCES mymod.i) get_property(support_files TARGET mymod PROPERTY SWIG_SUPPORT_FILES)
注意
仅列出最主要的支持文件。如果使用
SWIG
的某些高级功能(例如%template
),则可能未列出关联的支持文件。首选使用SWIG_SUPPORT_FILES_DIRECTORY
属性来处理支持文件。SWIG_SUPPORT_FILES_DIRECTORY
在 3.12 版本中添加。
此输出属性指定将生成支持文件的目录。
注意
当源文件属性
OUTPUT_DIR
定义时,可以将多个目录指定为SWIG_SUPPORT_FILES_DIRECTORY
的一部分。
CMake 变量¶
可以设置一些变量来自定义 swig_add_library
以及 SWIG
的行为
UseSWIG_MODULE_VERSION
在 3.12 版本中添加。
为
UseSWIG
模块指定不同的行为。设置为 1 或未定义:应用旧的行为。
设置为 2:对支持文件应用新策略:在
SWIG
接口编译之前擦除支持文件的输出目录。
CMAKE_SWIG_FLAGS
向所有 swig 调用添加标志。
CMAKE_SWIG_OUTDIR
指定语言特定文件的写入位置 (swig
-outdir
选项)。SWIG_OUTFILE_DIR
在 3.8 版本中添加。
指定将放置生成的源文件的输出目录名称。如果未指定,则使用
CMAKE_SWIG_OUTDIR
。SWIG_MODULE_<name>_EXTRA_DEPS
为
<name>
的生成模块指定额外的依赖项。SWIG_SOURCE_FILE_EXTENSIONS
在 3.14 版本中添加。
指定源文件扩展名列表,以覆盖仅将
.i
文件视为SWIG
工具源文件的默认行为。例如set(SWIG_SOURCE_FILE_EXTENSIONS ".i" ".swg")
SWIG_USE_SWIG_DEPENDENCIES
在 3.20 版本中添加。
如果设置为
TRUE
,则隐式依赖项由swig
工具本身生成。此变量仅对 Makefile、Ninja、Xcode
和 Visual Studio 生成器有意义。默认值为FALSE
。如果未定义,源文件属性
USE_SWIG_DEPENDENCIES
将使用此变量的值进行初始化。在 3.21 版本中添加: 添加了对
Xcode
生成器的支持。在 3.22 版本中添加: 添加了对 Visual Studio 生成器 的支持。
已弃用的命令¶
- swig_link_libraries¶
在 3.13 版本中已弃用: 使用
target_link_libraries()
以及标准目标名称,或者对于旧的目标命名,使用${SWIG_MODULE_<name>_REAL_NAME}
。将库链接到 swig 模块
swig_link_libraries(<name> <item>...)
此命令具有与
target_link_libraries()
命令相同的功能。注意
当策略
CMP0078
设置为NEW
时,swig_add_library()
使用指定的<name>
创建标准目标,并且必须使用target_link_libraries()
代替此命令。对于旧的行为(当
CMP0078
设置为OLD
并且UseSWIG_TARGET_NAME_PREFERENCE
变量设置为"LEGACY"
时,或在 3.12 之前的 CMake 版本中),最好使用target_link_libraries(${SWIG_MODULE_<name>_REAL_NAME} ...)
而不是此命令。