如何使用 CMake 获取命令行输出作为参数?
How to use CMake to get command line output as an argument?
我正在使用 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
所以我想知道在CMake中有没有像shell ls /lib/module
一样方便的方法,然后我可以使用命令行输出作为header/library根目录的参数?
非常感谢。
您可以使用 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()
我正在使用 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
所以我想知道在CMake中有没有像shell ls /lib/module
一样方便的方法,然后我可以使用命令行输出作为header/library根目录的参数?
非常感谢。
您可以使用 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()