上下文:
我正在构建一个CMake项目。这个CMake项目正在使用CLion远程开发在一个码头容器中运行,以便直接在码头上开发我的代码。因此,所有标头和库都在停靠程序中。
现在,由于我的项目被分成几个部分,所以我有一个“主”CMakelists.txt,它调用了下面的部分,如下所示:
- CMakelists.txt
- Project_part1
- Project_part2
- Project_part3
注意:单独地,构建每一个都很好。
问题是,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/python2 3 Part_2需要ROS_PYTHON_VERSION =2,PYTHON_EXECUTABLE =/usr/bin/python2 2
但是所发生的事情似乎是第一个获得包含/构建的强制使用它使用的版本。
我尝试的是(伪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
include_part3
set_env_var_for_part1_part2
include_part1_part2 ->错误构建在CLion上的part1_part2上。
set_env_var_for_part1_part2
include_part1_part2
set_env_var_for_3
include_part3 ->错误构建在CLion上的part3上。
..。不管我做什么都是错误。
从错误中。我认为我的话是理所当然的,因为他们各自找不到需要构建的包,而是因为他们使用了错误的python版本的。Part1和Part2需要Python3,Part3需要Python2。
在CLion IDE中没有环境变量集。
结论:环境变量的设置似乎变化不大。因此,我在CMakeCache.txt中找到了python:FILEPATH=/usr/bin/python,这可以解释为什么它是在这里设置的,并且一旦被找到,可能就不需要再次更新了。清理缓存,删除cmake构建调试也没有改变任何东西。
我卡住了。我需要一种方法让所有这些程序使用不同版本的python构建。
发布于 2020-05-19 05:27:06
实际上,CMakeCache.txt迫使python的路径成为第一个使用的路径。我试图更改环境变量,但我想在看到env变量之后,它会转到CMakeCache.txt并被使用,而不是实际获得环境变量。
因此,与我所做的:set( ENV{PYTHON_EXECUTABLE} /usr/bin/python3)
改变Python不同的是,最好的方法是直接更改CMake中的变量:
set( PYTHON_EXECUTABLE /usr/bin/python3 )
https://stackoverflow.com/questions/61892227
复制相似问题