CMake: переадресация аргумента custom_target на указанную команду c - PullRequest
0 голосов
/ 13 января 2020

Я хотел бы выполнить сценарий python при активированной виртуальной среде python. Этот скрипт (run_smth.py) имеет входные параметры.

Есть ли возможность создать пользовательскую цель run_my_script таким образом, чтобы после настройки можно было просто набрать make run_my_script arg1 arg2, и это было бы равно . /path_to_venv/bin/activate && python3 run_smth.py arg1 arg2?

Дело в том, что я хочу иметь возможность выполнять этот скрипт удобным способом, когда настройка CMake завершена.

1 Ответ

0 голосов
/ 14 января 2020

Мне не известно о какой-либо поддержке передачи аргументов в пользовательскую цель CMake, как вы описали. В вашем случае аргументы нужно будет передавать через make, но CMake также должен поддерживать передачу их через Visual Studio, Ninja и другие генераторы.

Таким образом, одним из способов увидеть эту работу было бы жесткое кодирование аргументов на этапе настройки CMake. Вы можете настроить CMake и передать аргументы, с которыми вы собираетесь запускать пользовательскую цель:

cmake -DARG1=arg1 -DARG2=arg2 ..

Это будет инкапсулировать аргументы в ARG1 и ARG2 переменных CMake, так что ваша пользовательская цель может выглядеть примерно так:

add_custom_target(run_my_script
    COMMAND ${CMAKE_BINARY_DIR}/path_to_venv/bin/activate 
        && python3 ${CMAKE_CURRENT_LIST_DIR}/run_smth.py ${ARG1} ${ARG2}
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)

Предполагается, что ваш скрипт run_smth.py находится в том же каталоге, что и файл CMake, содержащий эту команду, благодаря использованию CMAKE_CURRENT_LIST_DIR , Аналогично, этот каталог используется в качестве рабочего каталога для запуска сценария python.

Если установка аргументов сценария на этапе настройки CMake слишком ограничительна, вы также можете создать несколько пользовательских целей CMake (например, некоторые для различные тестовые шаблоны, такие как run_my_script_sanity и run_my_script_regression):

# Create a custom target for the sanity tests.
add_custom_target(run_my_script_sanity
    COMMAND ${CMAKE_BINARY_DIR}/path_to_venv/bin/activate 
        && python3 ${CMAKE_CURRENT_LIST_DIR}/run_smth.py -sanity ${ARG2}
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
# Create a custom target for the regression tests.
add_custom_target(run_my_script_regression
    COMMAND ${CMAKE_BINARY_DIR}/path_to_venv/bin/activate 
        && python3 ${CMAKE_CURRENT_LIST_DIR}/run_smth.py -regression ${ARG2}
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...