在python脚本中运行cmake命令

时间:2017-03-08 13:04:46

标签: python python-2.7 boost cmake

是否可以在python脚本中运行cmake命令?我想设置我通过python代码手动安装和编译的boost库。我希望通过python脚本发生类似set(BOOST_INCLUDEDIR "/path/to/boost/include")的事情。所以,在运行cmake之前,我希望通过python代码设置cmake变量。

3 个答案:

答案 0 :(得分:0)

在使用command-line arguments of 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 :(得分:0)

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

通过从命令行设置cmake缓存变量。从命令行定义此语法的语法如下here

-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)

答案 2 :(得分:0)

CMake的一些find modules确实支持从环境变量中读取路径提示:

  •   

    &#34;用户可以将这些提示或结果设置为缓存条目。 [...]如果未将它们指定为CMake变量或缓存条目,可以将这些指定为环境变量。&#34;

  • 我更喜欢这种设置查找模块目录的方法,因为它也可以在系统级别设置,我不必为我的每个CMake项目提供路径自定义构建库了。

  • FindBoost.cmake是一个很好的例子,因为它提供了各种环境变量:

    Boost_DIR
    BOOSTROOT 
    BOOST_ROOT 
    BOOST_INCLUDEDIR 
    BOOST_LIBRARYDIR
    
  • 注意:这些被视为&#34;提示&#34;,因为一旦找到,它们就不会覆盖任何CMake缓存值。

    < / LI>