如何使用 CMake 获取命令行输出作为参数?

问题描述 投票:0回答:1

我正在使用CMake构建linux模块模式,所以我正在ubuntu上检索头文件,目前我正在docker中运行ubuntu,它有:

/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

所以我想知道CMake是否有一个像shell一样方便的方法

ls /lib/module
,然后我可以使用命令行输出作为头/库根目录的参数?

非常感谢。

cmake module directory header
1个回答
1
投票

您可以使用 CMake 的

file(GLOB ...)
命令列出特定目录中的内容(文件和子目录)。如果
/lib/modules
目录只包含一个子目录(并且没有文件),你可以这样做:

file(GLOB MY_VERSIONED_DIR /lib/modules/*)

您现在可以在 CMake 代码中的其他位置使用

${MY_VERSIONED_DIR}
变量,因为它将使用子目录路径填充,例如:

/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()
© www.soinside.com 2019 - 2024. All rights reserved.