首页 > 解决方案 > 如何在shellscript中获取包的CMake变量

问题描述

我想找到Qt5WaylandClient_PRIVATE_INCLUDE_DIRS由 Qt5WaylandClient 包设置的变量。我怎样才能从外壳(破折号)中得到它?像这样的东西:

cmake -find_package(Qt5WaylandClient) -get_variable Qt5WaylandClient_PRIVATE_INCLUDE_DIRS

或者

cmake -file path/to/my/CMakeLists.txt -get_variable Qt5WaylandClient_PRIVATE_INCLUDE_DIRS

标签: shellcmake

解决方案


CMake 确实有一个--find-package命令行选项,但它没有得到很好的支持,也没有很好的文档记录。这里有一个描述其功能的答案,但这可能不是您想要的。

最初,您似乎可以cmake在脚本模式下使用-P, 在包含您的find_package(Qt5WaylandCleint)命令的 CMake 文件上运行并将其变量打印到控制台。

cmake -P MyFindQt5WaylandClient.cmake

但是,find_package()在 CMake 项目范围之外运行是行不通的。它会产生几个错误,因为 CMake 对系统或您的目标语言一无所知。因此,您必须创建一个最小的 CMake 项目,然后运行find_package()​​. 像这样的 CMakeLists.txt 文件应该可以工作:

cmake_minimum_required(VERSION 3.16)
project(MyProj)

find_package(Qt5WaylandClient REQUIRED)
# Print the desired variable.
message("${Qt5WaylandClient_PRIVATE_INCLUDE_DIRS}")

然后您可以从命令行运行cmake,这会将Qt5WaylandClient_PRIVATE_INCLUDE_DIRS变量打印到控制台。您可以使用-S-B命令行选项分别指定 CMake 源和二进制目录。

cmake -S . -B build

推荐阅读