问题描述
如何在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中。