【问题标题】:How to use 2 differents version of Python using CMake如何使用 CMake 使用 2 个不同版本的 Python
【发布时间】:2020-09-05 14:06:06
【问题描述】:

上下文:

我正在构建一个 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

包括_part1_part2 -> 在 CLion 上正确构建。

set_env_var_for_3

set_env_var_for_part1_part2

包括_part1_part2 -> 在 CLion 上正确构建。

set_env_var_for_part1_part2

set_env_var_for_3

包括_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

include_part3

set_env_var_for_part1_part2

包括_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 构建。

【问题讨论】:

    标签: python cmake clion


    【解决方案1】:

    嗯,所以,确实 CMakeCache.txt 强制 python 的路径成为第一个使用的路径。我试图更改环境变量,但我猜想在看到环境变量后它会转到 CMakeCache.txt 并被使用,而不是实际获取环境变量。

    因此,不要像我一样更改 Python:set( ENV{PYTHON_EXECUTABLE} /usr/bin/python3) 的好方法是直接更改 CMake 中的变量:

    set( PYTHON_EXECUTABLE /usr/bin/python3 )
    

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多