CMake для запуска скрипта

#python #cmake

#python #cmake

Вопрос:

Я пытаюсь создать сборку CMake, которая будет запускать несколько скриптов python перед созданием программного обеспечения, если вообще будет. В качестве отправной точки я хотел создать проект CMake, который будет запускать только один скрипт python. У меня возникли проблемы с запуском скрипта. Вот что у меня есть в моем проекте.

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 , который я хочу. Что я здесь делаю не так?

Комментарии:

1. Ваш код внезапно завершается на последней строке без закрывающей скобки ( ) ) . Не могли бы вы завершить эту строку?

2. извините за это. я обновил его.

3. «Кажется, он пытается запустить компилятор Visual Studio» — вы имеете в виду, что когда CMake настраивает проект, он проверяет компиляторы, но не запускает ваш скрипт? Это правильно, так как project() по умолчанию включены языки C и C , а настраиваемая цель и команды выполняются на этапе сборки , а не на этапе настройки .

4. итак, как бы мне заставить CMake запускать только скрипт в этом примере. Я пытаюсь понять, как я могу отключить поведение CMake по умолчанию для запуска сборки C здесь.

Ответ №1:

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

Кроме того, вы можете указать RESULT_VARIABLE или OUTPUT_VARIABLE с помощью команды execute_process для установки переменных CMake на основе кодов возврата или стандартных выходных данных выполняемого процесса; это может быть полезно для влияния на последующее поведение CMake.

Кроме того, если вы действительно хотите отключить начальную проверку компилятора CMake, вы можете отключить языки, указав NONE в project команде.

Комментарии:

1. потрясающе, те, где ответы, которые я искал. Спасибо!

2. У меня был еще один вопрос по этому поводу. Если бы я хотел запустить 2 скрипта, как мне обеспечить, чтобы один запускался раньше другого. Использую ли я зависимость?

3. @wolverine99 Я обновил ответ, чтобы ответить на ваш вопрос. Для выполнения нескольких скриптов используйте отдельные execute_process команды, чтобы сохранить порядок их выполнения.