繁体   English   中英

在python脚本中运行cmake命令

[英]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脚本中利用这两者之一或两者取决于您的特定设置。

选项1(如果您通过python调用cmake)

通过从命令行设置cmake缓存变量。 用于从所述命令行定义该语法是从如下这里

-D <var>:<type>=<value>

因此,在您的情况下,在cmake列表文件中

set(BOOST_INCLUDEDIR MY_BOOST_INCLUDE)

然后在调用cmake时只需覆盖该选项

cmake -DMY_BOOST_INCLUDE:STRING="/path/to/wherever"

选项2(如果要在另一点调用cmake)

您可以在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM