#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
команды, чтобы сохранить порядок их выполнения.