gpt4 book ai didi

c++ - 了解 find_package 是否定义 INCLUDE_DIR 或 INCLUDE_DIRS 的标准方法

转载 作者:行者123 更新时间:2023-11-30 01:06:53 28 4
gpt4 key购买 nike

在尝试编写构建文件时,我一直在使用 cmake 时遇到这个问题。 find_package 命令应该定义要与 include_directories 指令一起使用的变量,但它这样做并不一致。例如,考虑以下代码:

find_package(OpenGL REQUIRED)
find_package(glm REQUIRED)

message(STATUS ${GLM_INCLUDE_DIR})
message(STATUS ${GLM_INCLUDE_DIRS})
message(STATUS ${OPENGL_INCLUDE_DIR})
message(STATUS ${OPENGL_INCLUDE_DIRS})

只有第二条和第三条消息被打印出来,即使一个是“DIR”而另一个是“DIRS”

是否有一种标准方法来确定您应该使用哪一个?

最佳答案

事实上的标准是*_LIBRARIES*_DIRS,即复数变量名是结果变量。因此,它们只能被读取而不是被写入。

此外,对于编写良好的现代 FindModule,即使是这些变量也很少对用户有用,因为导入的目标将包含所有相关信息。因此,用户无需直接使用结果变量即可执行以下操作:

add_executable(myexe OpenGL::GL)
add_library(mylibrary PUBLIC OpenGL::GL)

然而,了解如何使用 FindModule 的正确方法是阅读文档,这些文档将显式地包含在文档中,或者位于 FindModule.cmake 文件开头的 CMake 注释中。

所有标准模块文件都在 CMake 安装子目录“Modules”中,并且大多数(全部?)都有 CMake 文档。

位置提示变量通常被命名为 *_INCLUDE_DIR*_LIBRARY,您可以在调用 find_package() 之前设置它们 CMakeLists.txt 或者您可以使用 cmake -Dcmake-guiccmake 进行设置。

关于c++ - 了解 find_package 是否定义 INCLUDE_DIR 或 INCLUDE_DIRS 的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45471859/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com