Як ініціалізувати змінну CMake результатом команди оболонки


80

Чи є спосіб встановити змінну у сценарії CMake на вихід команди оболонки? Щось подібне SET(FOO COMMAND "echo bar")прийшло б мені на думку

Відповіді:


84

Вам потрібна execute_processкоманда.

У вашому випадку у Windows:

execute_process(COMMAND CMD /c echo bar OUTPUT_VARIABLE FOO)

або на Linux, просто:

execute_process(COMMAND echo bar OUTPUT_VARIABLE FOO)


У цьому конкретному випадку CMake пропонує крос-платформне рішення. CMake може сам використовуватися для запуску команд, які можуть бути використані у всіх системах, одна з яких - echo. Для цього CMake слід передати аргумент командного рядка -E. Щоб отримати повний список таких команд, запустітьcmake -E help

Усередині сценарію CMake на виконуваний файл CMake посилається ${CMAKE_COMMAND}, тому сценарію потрібно виконати:

execute_process(COMMAND ${CMAKE_COMMAND} -E echo bar OUTPUT_VARIABLE FOO)

12
Залежно від команди, яку ви виконуєте, вона може встановити кінцеві пробіли для змінної. Якщо така поведінка не бажана, ви можете використовувати опцію OUTPUT_STRIP_TRAILING_WHITESPACE як останній аргумент функції 'execute_process'.
hbobenicio

3
@hbobenicio OUTPUT_STRIP_TRAILING_WHITESPACEбільш-менш потрібно ІМО
Trevor Boyd Smith

4
Якщо ваша команда - це не просто простий виклик програми, використовуйте COMMAND bash "-c" "your_complex.sh | command && stuff". Кредит: stackoverflow.com/a/35695350/5470596
БМУ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.