在编译google-test时,我试图链接本地版本的g阻击(它在~/mylibs/g标志中)。在gtest的CMakeLists.txt中,它使用find_package:
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在我的文件夹中找到这个包?
谢谢!
发布于 2018-01-29 03:31:28
G频标文档描述了在使用CMake时指定非标准安装的位置:
必须将
gflags_DIR变量设置为包含g频标-config.cmake文件的<prefix>/lib/cmake/gflags目录。
在您的例子中,这看起来可能是:
cmake -Dgflags_DIR=/home/blackball/mylibs/gflags/lib/cmake/gflags [...]发布于 2018-01-29 11:06:20
由于您正在超级cmake中将gflags作为子项目集成,所以如果您的“元项目”源dir中包含了find_package(),则基本上希望它是不运行的。这可以通过重载find_package()命令来完成。
顶级CMakeLists.txt:
# 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)
https://stackoverflow.com/questions/48492191
复制相似问题