首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过命令行告诉CMake在本地文件夹中查找库?

如何通过命令行告诉CMake在本地文件夹中查找库?
EN

Stack Overflow用户
提问于 2018-01-28 22:46:46
回答 2查看 576关注 0票数 0

在编译google-test时,我试图链接本地版本的g阻击(它在~/mylibs/g标志中)。在gtest的CMakeLists.txt中,它使用find_package:

代码语言:javascript
复制
if (WITH_GFLAGS)
  find_package (gflags 2.2.0)

  if (gflags_FOUND)
    set (HAVE_LIB_GFLAGS 1)
    determine_gflags_namespace (gflags_NAMESPACE)
  endif (gflags_FOUND)
endif (WITH_GFLAGS)

我不想修改CMakeLists.txt文件。是否要告诉cmake在我的文件夹中找到这个包?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-29 03:31:28

G频标文档描述了在使用CMake时指定非标准安装的位置:

必须将gflags_DIR变量设置为包含g频标-config.cmake文件的<prefix>/lib/cmake/gflags目录。

在您的例子中,这看起来可能是:

代码语言:javascript
复制
cmake -Dgflags_DIR=/home/blackball/mylibs/gflags/lib/cmake/gflags [...]
票数 0
EN

Stack Overflow用户

发布于 2018-01-29 11:06:20

由于您正在超级cmake中将gflags作为子项目集成,所以如果您的“元项目”源dir中包含了find_package(),则基本上希望它是不运行的。这可以通过重载find_package()命令来完成。

顶级CMakeLists.txt:

代码语言:javascript
复制
# Use find_package everywhere, no-op if it's a subproject
macro(find_package)
  if(NOT TARGET ${ARGV0} AND NOT TARGET ${ARGV0}::${ARGV0})
    _find_package(${ARGV})
  else()
    if(TARGET ${ARGV0})
        get_target_property(TGT_VER ${ARGV0} VERSION)
        set(TGT ${ARGV0})
    else()
        get_target_property(TGT_VER ${ARGV0}::${ARGV0} VERSION)
        set(TGT ${ARGV0}::${ARGV0})
    endif()
    message(STATUS "Found ${ARGV0}: CMake Target ${TGT} (found version \"${TGT_VER}\")")
    set(${ARGV0}_FOUND TRUE)
  endif()
endmacro()

注意:对于gflags_NAMESPACE,您可能还需要“强制”它是一个源,而不是二进制(cf问题ToDo)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48492191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档