CMake Swig:如何在包含的 .i 文件上添加依赖项

Posted

技术标签:

【中文标题】CMake Swig:如何在包含的 .i 文件上添加依赖项【英文标题】:CMake Swig: how to add depencencies on included .i files 【发布时间】:2021-12-21 01:07:26 【问题描述】:

我正在使用 cmake 创建基于 swig 的绑定。

我像这样添加我的 swig 库。

SWIG_ADD_LIBRARY(my_swig_DLL
                                LANGUAGE
                                        Java
                                SOURCES
                                        myfile.i
                                        )  

一切正常,但 CMake 无法检测到我的 myfile.i 中包含的文件何时发生更改。例如,我的文件。包含该行

%include "my_other_file.i"

另一个文件本身不包含模块,但包含我在各种项目中使用的支持代码。

如何让 CMake 检测到 my_other_file 中的更改,以便在文件更改时重新编译所有内容?

快速提示:在源列表中添加 my_other_file.i 会生成文件不包含 %module 的错误。

谢谢

【问题讨论】:

【参考方案1】:

可能不是实现这一目标的最佳方式,但我找到了这个宏

function(watch)
    set_property(
            DIRECTORY
            APPEND
            PROPERTY CMAKE_CONFIGURE_DEPENDS $ARGV
    )
endfunction()

所以现在,我已将包含的 .i 文件重命名为 myinclude.inc_i,这样 cmake/swig 就不会直接处理它们(但至少它们出现在我的解决方案中),然后我“观看”然后使用之前定义的宏

watch(myinclude.inc_i)

如果修改了 myinclude.inc_i,则构建完整的解决方案。

【讨论】:

以上是关于CMake Swig:如何在包含的 .i 文件上添加依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWIG 包装许多 .h 文件并包含任何依赖项?

Ruby 和 SWIG 与 CMake

CMake 访问 SWIG 并将 java 库链接到现有 C++ 项目的问题

CMake - SWIG - 移植动态库

CMake 错误:找不到 SWIG(缺少:SWIG_DIR)

CMake、SWIG 和共享库