gflags: Missing gflags-targets.cmake, package registry entry, misc

(Disclaimer: I’m only a CMake journeyman so this could be a CMake issue. Please correct me if I’m wrong.)

TL;DR

gflags-config.cmake seems to export gflags_INCLUDE_DIR and gflags_LIBRARIES, but not something like gflags_LIBRARY_DIR. As a result, using the default instructions, linking fails with error LNK1181: cannot open input file 'gflags.lib'.

When built statically, the CMake config also fails to inform the generated project that it depends on Shlwapi.lib and linking fails with: “unresolved external symbol __imp_PathMatchSpecA …”

By manually adding the library search path to the Visual Studio project and adding Shlwapi.lib as a dependency, my project builds fine.

Details

I cloned and built gflags on Windows and successfully built it with VS2013:

  • cd c:\tmp\gflags-2.1.2
  • mkdir build
  • cd build
  • cmake-gui …
  • <open .sln and build with VS2013>

Building the INSTALL target on Windows puts everything under C:\Program Files\libraries\gflags, which has as children:

  • CMake
  • Include
  • Lib

In my own project, I followed the directions as on https://gflags.github.io/gflags/, except to find gflags.h, I had to add include_directories( ${gflags_INCLUDE_DIR} ) to tell the compiler where to find the header. gflags_INCLUDE_DIR resolves to C:\Program Files\libraries\gflags\Include and gflags_LIBRARIES resolves to gflags.lib. However, the compiler can’t find gflags.lib because there isn’t a gflags_LIBRARY_DIR or something to that effect which resolves to C:\Program Files\libraries\gflags\Lib.

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 15 (9 by maintainers)

Most upvoted comments

BTW You could also use the example project to test the CMake configuration of your gflags installation. The CMakeLists.txt of this project basically comes down to only the following:

find_package(gflags REQUIRED)
# add_subdirectory(foo)
add_executable(foo foo.cc)
target_link_libraries(foo gflags)