gpt4 book ai didi

CMake 的 FIND_PACKAGE 未设置变量

转载 作者:行者123 更新时间:2023-12-04 18:11:59 27 4
gpt4 key购买 nike

我目前正在尝试编写我的第一个重要的 CMake 项目,但我无法检查 FIND_PACKAGE() 的任何输出,因为它似乎没有将值赋予我期望的全局变量!例如,下面的代码:

MESSAGE("CMake version: ${CMAKE_VERSION}")
FIND_PACKAGE(Armadillo)
IF(Armadillo_FOUND)
MESSAGE("Found Armadillo.")
MESSAGE("Armadillo include dir is: ${ARMADILLO_INCLUDE_DIR}")
MESSAGE("Armadillo lib's to be linked against: ${Armadillo_LIBRARIES}")
MESSAGE("Armadillo lib version: ${PACKAGE_FIND_VERSION}")
ENDIF(Armadillo_FOUND)

产生以下终端输出
/build]$ CMake version: 2.6.4
/build]$ Found Armadillo.
/build]$ Armadillo include dir is:
/build]$ Armadillo lib's to be linked against:
/build]$ Armadillo lib version:

我知道这是非常基本的,但是从所有教程中我可以发现这应该会产生有用的输出。有任何想法吗??

最佳答案

感谢arrowdodger,您的回答很有帮助,但这并不是问题所在。问题是在执行 FIND_PACKAGE(Armadillo) 之后没有设置这些变量(甚至没有设置 ARMADILLO_FOUND)变量。 Armadillo_FOUND(注意小写)变量已设置,并且似乎是由 FIND_PACKAGE() 函数而不是 cmake 模块文件设置的。
将模块文件复制到我的目录并使用 INCLUDE() 命令而不是 FIND_PACKAGE() 命令调用它后,我能够找到问题所在。它似乎与将 cmake 2.6.4 与 Armadillo 2.2.3 一起使用(都是过时的版本,但我受到我们的系统分布式构建的限制)。由于我安装了 Armadillo 并且 Find_PACKAGE() 似乎检测到这一点(将 Armadillo_FOUND 设置为 true),但是模块文件中的以下行失败(并且注意到这样做):

# Checks 'REQUIRED', 'QUIET' and versions.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Armadillo
REQUIRED_VARS ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR
VERSION_VAR ARMADILLO_VERSION_STRING)
# version_var fails with cmake < 2.8.4
FIND_PACKAGE() 在这一行似乎没有失败,如上所述,FIND_PACKAGE() 将 Armadillo_FOUND 设置为 true,但由于此失败,模块文件中设置的所有变量都不会传播回 CMakeLists.txt 文件。从上面的列表中删除 VERSION_VAR 解决了这个问题。当然,更好的解决方法是更新 cmake 和 Armadillo ,但这不是我的选择:(

关于CMake 的 FIND_PACKAGE 未设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938996/

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