我的CMake项目添加了一些自定义命令,运行python脚本,像这样
add_custom_target(custom_target
COMMAND ${Python3_EXECUTABLE} script.py
)
大多数情况下,python解释器都是从虚拟环境启动的。 Python脚本会导入numpy,最好在启动它们之前先激活该环境:source /path/bin/activate && python ./script.py
但是,我和一些团队成员都在Windows上工作。通常,我们从“开始”菜单启动CMake-gui。因此,它没有激活python环境。因此,最好将virtualenv激活放在自定义命令中,如下所示:
add_custom_target(custom_target
COMMAND source /path/to/venv/bin/activate && ${Python3_EXECUTABLE} script.py
)
或Windows
add_custom_target(custom_target
COMMAND c:\Anaconda\condabin\conda activate py37 && ${Python3_EXECUTABLE} script.py
)
由于我们拥有Anaconda和CPython,因此至少有两种虚拟环境激活命令:conda activate venv
和/path/to/venv/bin/activate
我尝试解析Python3_INTERPRETER_ID
(https://cmake.org/cmake/help/latest/module/FindPython3.html#result-variables)。但是,此变量仅包含“ Python”,因此不可靠。
研究FindPython CMake模块的源代码表明它解析了python -V
的输出。
但是,似乎Anaconda试图模仿CPython:
(py37) C:\work>python -V
Python 3.7.7
(py37) C:\work>python
Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
所以,我的问题是:是否可以可靠地自动找出激活命令?