[英]running cmake commands in python script
是否可以在python脚本中运行cmake命令? 我想设置通过python代码手动安装和编译的boost库。我希望通过python脚本来执行set(BOOST_INCLUDEDIR "/path/to/boost/include")
。 因此,在运行cmake之前,我希望cmake变量通过python代码设置。
有两种方法可以在CMake处理开始之前预先初始化CMake变量,两种方法都使用cmake
命令行参数 。
一种简单的方法是使用-D
命令行选项将一个或多个变量传递给CMake。 像这样:
cmake -DBOOST_INCLUDEDIR:PATH="/path/to/boost/include" ...
另一个选择是创建一个“初始缓存文件”(基本上是一个仅包含set(...)
CMake命令的文件),然后使用-C
将该初始缓存文件传递给CMake:
echo 'set(BOOST_INCLUDEDIR "/path/to/boost/include" CACHE PATH "")' > initial_cache.cmake
cmake -C initial_cache.cmake ...
此选项适用于第一次使用给定的二进制目录运行CMake,即在它创建自己的CMakeCache.txt
文件之前。
如何从Python脚本中利用这两者之一或两者取决于您的特定设置。
是
通过从命令行设置cmake缓存变量。 用于从所述命令行定义该语法是从如下这里
-D <var>:<type>=<value>
因此,在您的情况下,在cmake列表文件中
set(BOOST_INCLUDEDIR MY_BOOST_INCLUDE)
然后在调用cmake时只需覆盖该选项
cmake -DMY_BOOST_INCLUDE:STRING="/path/to/wherever"
您可以在python中创建一个cmake模块,以设置所需的定义。 例如,制作一个Python脚本,用所需的任何缓存变量填充my_module.cmake
,即
set(MY_BOOST_INCLUDE "script/generated/path")
#... other stuff you want to define
然后在您的静态cmake列表文件中
include(my_module)
CMake的某些查找模块确实支持从环境变量读取路径提示:
“用户可以将这些提示或结果设置为缓存条目。如果未将其指定为CMake变量或缓存条目,则可以将其指定为环境变量。”
我更喜欢这种设置查找模块目录的方法,因为这也是我可以在系统级别上设置的方法,而且我不必再为每个CMake项目提供自定义构建库的路径了。
FindBoost.cmake
是一个很好的例子,因为它提供了各种环境变量:
Boost_DIR BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR
注意 :这些被认为是“提示”,因为一旦发现增强 ,它们将不会覆盖任何CMake缓存值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.