【问题标题】:How to add include directories to a swig cmake target without adding them globally?如何将包含目录添加到 swig cmake 目标而不全局添加它们?
【发布时间】:2021-01-23 07:54:25
【问题描述】:

如何在 cmake 中为 swig 目标指定 include_directories?我看到你要添加一个 swig 目标:

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 目标?

【问题讨论】:

  • 如果target_include_directories 不起作用,您可以(作为一种解决方法)添加一个新的INTERFACE 库,将其链接到swig 目标并将target_include_directories 与这个“帮助”目标一起使用.然后客户端代码链接到新的 INTERFACE 库,而不是直接链接到 swig 目标。

标签: c++ cmake include swig include-path


【解决方案1】:

在后台,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 中添加的。

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多