我如何使用cmake以便" swig插件"尊重包含路径

时间:2018-02-21 16:03:59

标签: cmake swig

我正在使用cmake 3.8.1与FindSWIG和UseSWIG"扩展"使用swig作为代码生成器。 " swig .i" file包含对不同目录中的文件的include语句。我的CMakeLists.txt的重要部分如下所示:

...
find_package (TCL REQUIRED)
if (TCL_FOUND)
set (HAVE_TCL_H 1)
endif (TCL_FOUND)
find_package (SWIG )
if (SWIG_FOUND)
include(${SWIG_USE_FILE})
set (SWIG_FILE /home/steve/cmake_games/src/foo/bar/bar_swig.i)
set_property(SOURCE ${SWIG_FILE} PROPERTY CPLUSPLUS ON) 
swig_add_library (bar_tclext LANGUAGE tcl SOURCES ${SWIG_FILE}) 
include_directories (/home/steve/cmake_games/src/foo/bar /home/steve/cmake_games/src/this/that)
set_target_properties(bar_tclext PROPERTIES LINKER_LANGUAGE CXX) 
swig_link_libraries(bar_tclext ${TCL_LIBRARY}) 
endif (SWIG_FOUND)

cmake生成make文件没有问题。但是,执行make会导致以下错误消息

/home/steve/cmake_games/src/foo/bar/bar_swig.i:3: Error: Unable to find 'that.iih'

that.iih位于/ home / steve / cmake_games / src / this / that

在生成的Makefile中查看swig调用,我可以看到没有使用include路径调用swig。

您可能认为具有绝对路径的CMakeLists.txt很奇怪。真正!这是因为CMakeLists.txt是由脚本生成的,这些脚本利用了我们在目录拓扑和命名中的约定。我们希望通过生成CMakeLists.txt作为" configure"的一部分来继续执行此操作。过程

我需要在CMakeLists.txt中更改哪些内容?

1 个答案:

答案 0 :(得分:0)

你应该尝试在你的情况下设置Counter,例如:

CMAKE_SWIG_FLAGS

例如:https://github.com/google/or-tools/blob/master/cmake/python.cmake#L57

ps:如果你有编译定义,你也应该手动将它们传递给SWIG,因为你不能说swig宏来获取相关目标的所有属性。