【问题标题】:CMake to run scriptCMake 运行脚本
【发布时间】:2019-04-16 05:12:05
【问题描述】:

我正在尝试创建一个 CMake 构建,它将在构建软件之前运行多个 python 脚本,如果有的话。作为一个起点,我想创建一个只运行一个 python 脚本的 CMake 项目。我无法让脚本执行。这是我的项目中的内容。

test.py

open('script_output.txt', 'a').close()

CMakeLists.txt

cmake_minimum_required (VERSION 2.6)
project (module)

add_custom_command(OUTPUT script_output.c
           COMMAND python test.py)

add_custom_target(release ALL DEPENDS script_output.c)

它似乎尝试运行 Visual Studio 编译器,我不想要它并且不运行我想要的 python 脚本script_output.py。我在这里做错了什么?

【问题讨论】:

  • 您的代码突然在最后一行终止,没有右括号 ())。你能完成那行吗?
  • 对此感到抱歉。我更新了它。
  • “它似乎在尝试运行 Visual Studio 编译器” - 你的意思是,当 CMake 配置 项目时,它会检查编译器但不运行你的脚本?这是正确的,因为project() 默认启用语言 C 和 C++,并且自定义目标和命令在 build 阶段执行,而不是在 configure 阶段。
  • 那么我如何让 CMake 只运行本示例中的脚本。我试图了解如何禁用 CMake 的默认行为以在此处运行 C 构建。

标签: python cmake


【解决方案1】:

add_custom_command 将在您的代码编译期间运行(在 CMake 完成后),execute_process 将在 CMake 配置阶段运行。

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

# Skip compiler check by enabling no languages.
project(TestProj NONE)

# Tell CMake to run python from the directory where this CMakeLists file exists.
execute_process(COMMAND python test.py
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})

# If you have more than one script to run, use a 
# separate execute_process command, to ensure sequential execution.
execute_process(COMMAND python test2.py
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})

另外,您可以使用execute_process命令指定RESULT_VARIABLEOUTPUT_VARIABLE,以根据执行过程的返回码或标准输出设置CMake变量;这可能有助于影响后续的 CMake 行为。

另外,如果你真的想禁用 CMake 的初始编译器检查,你可以通过在 project 命令中指定 NONE 来禁用语言。

【讨论】:

  • 太棒了,那些我正在寻找答案的地方。谢谢!
  • 我对此还有一个问题。如果我想运行 2 个脚本,我如何确保一个在另一个之前运行。我是否使用依赖项?
  • @wolverine99 我更新了答案以解决您的问题。要执行多个脚本,请使用单独的 execute_process 命令来保留它们的执行顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多