Как использовать CMake, чтобы получить вывод командной строки в качестве аргумента? - PullRequest
0 голосов
/ 20 февраля 2020

Я использую CMake для создания linux режима модуля, поэтому я получаю заголовочные файлы в Ubuntu, в настоящее время я использую Ubuntu в docker, и он имеет:

/lib/modules/4.15.0-76-generic

Хорошо Через несколько дней, если я создам новый образ, он станет обновленным значением:

/lib/modules/4.15.0-78-generic

Так что это число меняется, но в / lib / module есть только один каталог, и это не 'uname -a ' вывод.

Linux 0a08e87c0a18 4.15.0-50-generic

Итак, я sh узнаю, есть ли в CMake удобный способ, такой как shell ls /lib/module, и затем я могу использовать вывод командной строки в качестве параметра для каталога header / library root ?

Большое спасибо.

1 Ответ

1 голос
/ 20 февраля 2020

Вы можете использовать команду CMake file(GLOB ...) для просмотра содержимого (файлов и подкаталогов) в определенном каталоге. Если каталог /lib/modules содержит только один подкаталог (и не содержит файлов), вы можете сделать что-то вроде этого:

file(GLOB MY_VERSIONED_DIR /lib/modules/*)

Теперь вы можете использовать переменную ${MY_VERSIONED_DIR} в другом месте вашего кода CMake, как он будет заполнен путем подкаталога, например:

/lib/modules/4.15.0-78-generic

Вы также можете использовать команду CMake execute_process(), которая выполняет команды в дочернем процессе во время CMake настроить время. Используйте аргумент OUTPUT_VARIABLE для захвата вывода вашей команды:

if(UNIX)
    execute_process(
        COMMAND ls /lib/modules
        OUTPUT_VARIABLE MY_VERSIONED_DIR 
    )
endif()
...