python - 如何使用 CMake 使用 2 个不同版本的 Python
问题描述
语境:
我正在构建一个 CMake 项目。这个 CMake 项目使用 CLion 远程开发在 docker 容器中运行,以便直接在 docker 中开发我的代码。因此所有的头文件和库都在 docker 里面。
现在,因为我的项目被分成几个部分,所以我有一个“主要”CMakelists.txt,它正在调用下面的部分,如下所示:
--- CMakelists.txt
------- Project_part1 -------------CMakelists.txt
------- Project_part2 -------------CMakelists.txt
------- Project_part3 -------------CMakelists.txt
注意:单独构建它们中的每一个都可以正常工作。
问题是,Project_part3需要Python2 作为解释器。但是上面的(part1,part2)需要Python3。
当仅包含 Project_part1 和 Project_part2 时,它通常在 CLion 上构建。当仅包含 Project_part3 时,它通常在 CLion 上构建。
要定义在构建过程中将使用哪个 Python 版本,需要使用和设置一些环境:
ROS_PYTHON_VERSION
PYTHON_EXECUTABLE
Part_1 和 Part_2 需要 ROS_PYTHON_VERSION = 3 和 PYTHON_EXECUTABLE = /usr/bin/python3 Part_2 需要 ROS_PYTHON_VERSION = 2 和 PYTHON_EXECUTABLE = /usr/bin/python2
但是发生的事情是第一个获得包含/构建的人似乎强制之后的人使用它使用的 Python 版本。
我所做的尝试是(伪cmake代码):
set_env_var_for_part1_part2
include_part1_part2 -> 在 CLion 上正确构建。
set_env_var_for_3
set_env_var_for_part1_part2
include_part1_part2 -> 在 CLion 上正确构建。
set_env_var_for_part1_part2
set_env_var_for_3
include_part1_part2 -> 在 CLion 上正确构建。
-> 没有错误
set_env_var_for_3
include_part3 -> 在 CLion 上正确构建。
set_env_var_for_3
set_env_var_for_part1_part2
include_part3 -> 在 CLion 上正确构建。
set_env_var_for_part1_part2
set_env_var_for_3
include_part3 -> 在 CLion 上正确构建。
-> 没有错误
set_env_var_for_3
包括_part3
set_env_var_for_part1_part2
include_part1_part2 -> 错误构建在 part1_part2 上的 CLion 上。
set_env_var_for_part1_part2
包括_part1_part2
set_env_var_for_3
include_part3 -> 在第 3 部分的 CLion 上构建错误。
...无论我做什么,这只是错误。
从错误中。认为我的话是理所当然的,这是因为他们分别没有找到他们需要构建的一些包,这是因为他们使用了错误的python版本。Part1 和 Part2 需要 Python3,Part3 需要 Python2。
CLion IDE 中没有设置环境变量
结论,设置环境变量似乎没有太大变化。因此,我进入 CMakeCache.txt 并发现 PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python 可以解释这一点,因为它是在这里设置的,并且一旦它可能不需要再次更新就被发现了。清理缓存,删除 cmake-build-debug 也没有改变任何东西。
我被困住了。我需要一种方法让所有这些程序都使用不同版本的 python 构建。
解决方案
好吧,所以,确实 CMakeCache.txt 强制 python 的路径成为第一个使用的路径。我试图更改环境变量,但我想在看到一个环境变量后,它会转到 CMakeCache.txt 并被使用,而不是实际获取环境变量。
因此,不要像我那样更改 Python:set( ENV{PYTHON_EXECUTABLE} /usr/bin/python3)
好的方法是直接更改 CMake 中的变量:
set( PYTHON_EXECUTABLE /usr/bin/python3 )
推荐阅读
- javascript - Javascript 不允许我获取对象的值
- amazon-web-services - 更改了 API-server 清单文件,但未实施更改
- excel - 如何删除标题中没有指定单词的所有列?
- php - 如何从 Piwigo 中删除 index.php 和 picture.php?
- go - 如何使用 go modules 在特定分支上导入包
- ios - 如何在 VCard 中使用“源”属性?
- android - 如何使软键盘变为静态?
- css - 内联样式属性的 CSS 选择器,同时排除属性值
- python - 如何在 Plotly Express 平行坐标图中格式化刻度?
- oracle - 使用 perl 运行 oracle 生产者