将 swig2.0 添加到 usr/bin/ 以便 运行 CMake
Adding swig2.0 to usr/bin/ in order to run CMake
我正在为我的程序尝试 运行 CMake,但我不断收到错误,这些错误都指向我的 usr/bin
目录中没有所需版本的 swig。
这是我在 运行 时遇到的错误:
home/program/build_program/Debug$ cmake .. -DCMAKE_BUILD_TYPE=Debug
CMake Error at
/home/my_name/tools/cmake/share/cmake-3.15/Modules/FindSWIG.cmake:39
(message):
Command "/usr/bin/swig2.0 -swiglib" failed with output:
Call Stack (most recent call first):
CMakeLists.txt:245 (FIND_PACKAGE)
CMake Error at CMakeLists.txt:246 (INCLUDE):
INCLUDE called with wrong number of arguments. include() only takes one file.
CMake Error at CMakeLists.txt:265 (SWIG_ADD_LIBRARY):
Unknown CMake command "SWIG_ADD_LIBRARY".
-- Configuring incomplete, errors occurred!
See also "/home/program/build_program/CMakeFiles/CMakeOutput.log".
这是我在usr/bin
中看到的:
usr/bin$ ls | grep swig
ccache-swig
ccache-swig3.0
swig
swig3.0
这些是我 CMakeLists.txt 中的第 245、246 和 265 行:
(245) FIND_PACKAGE(SWIG REQUIRED)
(246) INCLUDE(${SWIG_USE_FILE})
(265) SWIG_ADD_LIBRARY(pymcell
TYPE SHARED
LANGUAGE python
SOURCES src/pymcell.i ${SOURCE_FILES} ${BISON_dynGeomParser_OUTPUTS} ${FLEX_dynGeomScanner_OUTPUTS}
)
我认为这里的解决方案是在 usr/bin
中获取 swig2.0,但我不确定该怎么做。
我试过的:
我已经安装了 swig2.0.12,但是没有名为 "swig2.0" 的文件,即使有,我也不确定如何将其正确移动到 usr/bin
中。
我有点菜鸟,所以我希望这不是一个太愚蠢的问题。
我正在使用 Debian 9 和 CMake 3.15.4。
将我的评论变成答案:
FindSWIG 模块使用 SWIG_EXECUTABLE
变量作为对 SWIG 的 location/version 使用的提示。当找到 SWIG 可执行文件时,将获取版本,并由 CMake 缓存 。因此,后续使用 CMake 可能会期望 same 版本的 SWIG。
如果将 CMake 与多个版本的 SWIG 一起使用,或者更新 SWIG 路径 and/or 版本,您可以设置此 SWIG_EXECUTABLE
变量来告诉 CMake 在哪里查看。
set(SWIG_EXECUTABLE /usr/bin/swig3.0)
find_package(SWIG REQUIRED)
更新机器上的 SWIG 版本或位置时,您需要清除 CMake 中的所有 缓存 SWIG 变量,以便可以找到最新(或正确)的版本。通过清除 CMake 缓存或删除 CMakeCache.txt 文件并重新 运行 CMake.
来完成此操作
我正在为我的程序尝试 运行 CMake,但我不断收到错误,这些错误都指向我的 usr/bin
目录中没有所需版本的 swig。
这是我在 运行 时遇到的错误:
home/program/build_program/Debug$ cmake .. -DCMAKE_BUILD_TYPE=Debug
CMake Error at /home/my_name/tools/cmake/share/cmake-3.15/Modules/FindSWIG.cmake:39 (message):
Command "/usr/bin/swig2.0 -swiglib" failed with output:Call Stack (most recent call first):
CMakeLists.txt:245 (FIND_PACKAGE)CMake Error at CMakeLists.txt:246 (INCLUDE):
INCLUDE called with wrong number of arguments. include() only takes one file.CMake Error at CMakeLists.txt:265 (SWIG_ADD_LIBRARY): Unknown CMake command "SWIG_ADD_LIBRARY".
-- Configuring incomplete, errors occurred! See also "/home/program/build_program/CMakeFiles/CMakeOutput.log".
这是我在usr/bin
中看到的:
usr/bin$ ls | grep swig
ccache-swig
ccache-swig3.0
swig
swig3.0
这些是我 CMakeLists.txt 中的第 245、246 和 265 行:
(245) FIND_PACKAGE(SWIG REQUIRED)
(246) INCLUDE(${SWIG_USE_FILE})
(265) SWIG_ADD_LIBRARY(pymcell TYPE SHARED LANGUAGE python SOURCES src/pymcell.i ${SOURCE_FILES} ${BISON_dynGeomParser_OUTPUTS} ${FLEX_dynGeomScanner_OUTPUTS}
)
我认为这里的解决方案是在 usr/bin
中获取 swig2.0,但我不确定该怎么做。
我试过的:
我已经安装了 swig2.0.12,但是没有名为 "swig2.0" 的文件,即使有,我也不确定如何将其正确移动到 usr/bin
中。
我有点菜鸟,所以我希望这不是一个太愚蠢的问题。
我正在使用 Debian 9 和 CMake 3.15.4。
将我的评论变成答案:
FindSWIG 模块使用 SWIG_EXECUTABLE
变量作为对 SWIG 的 location/version 使用的提示。当找到 SWIG 可执行文件时,将获取版本,并由 CMake 缓存 。因此,后续使用 CMake 可能会期望 same 版本的 SWIG。
如果将 CMake 与多个版本的 SWIG 一起使用,或者更新 SWIG 路径 and/or 版本,您可以设置此 SWIG_EXECUTABLE
变量来告诉 CMake 在哪里查看。
set(SWIG_EXECUTABLE /usr/bin/swig3.0)
find_package(SWIG REQUIRED)
更新机器上的 SWIG 版本或位置时,您需要清除 CMake 中的所有 缓存 SWIG 变量,以便可以找到最新(或正确)的版本。通过清除 CMake 缓存或删除 CMakeCache.txt 文件并重新 运行 CMake.
来完成此操作