如何在不全局添加的情况下将包含目录添加到swig cmake目标?

问题描述

如何在cmake中为swig目标指定include_directories?我看到您可以添加目标:

swig_add_library(swg_target
        TYPE STATIC
        LANGUAGE python
        SOURCES swg_src_files.i swg_src_files.h swg_src_files.cpp
)

但遵循通常的做法

target_include_directories(swg_target PUBLIC ".../include")

不起作用(即似乎什么也没做),而我需要放

include_directories(".../include")

之前呼叫swig_add_library。有没有一种方法可以将包含目录添加到swig目标中,而不必为每个目标全局添加这些目录?

解决方法

内幕之下,swig_add_library必须最终调用add_library并设置一些属性,但是文档中有些奇怪之处:

可以将目标库属性设置为对所有SWIG输入文件应用相同的配置。

SWIG_USE_TARGET_INCLUDE_DIRECTORIES
如果设置为TRUE,则目标属性INCLUDE_DIRECTORIES的内容将转发到SWIG编译器。如果设置为FALSE或未定义,则将忽略目标属性INCLUDE_DIRECTORIES。通过指定源属性USE_TARGET_INCLUDE_DIRECTORIES,可以覆盖此行为。

因此,为了使用target_include_directories,但还必须在目标上设置上述属性。如果我正确阅读Git历史记录,它将添加到CMake 3.13中。