[CMake] problem with CMake not including library's path (with pkg-config)

Andreas Naumann Andreas-Naumann at gmx.net
Thu May 24 16:38:28 EDT 2018


Dear Francesco,

I use the pkg-config module with IPopt and had the same problem. 
According to the documentation, the library paths are in 
<XPREFIX>_LIBRARY_DIRS. In your case, you should find the paths in the 
variable AGG_LIBRARY_DIRS or all flags in the variable  AGG_LDFLAGS .

Regards,
Andreas
Am 24.05.2018 um 18:48 schrieb Francesco Abbate:
> Hi all,
>
> I stumbled in a problem with CMake. Everything is working fine except
> that, for two libraries that I locate with pkg-config, cmake does not
> include during linking the library's path (-L<path>) which is given by
> pkg-config.
>
>
> Here an extract of the CMakeLists.txt:
>
>
> [...]
>
> include(FindPkgConfig)
> pkg_search_module(AGG REQUIRED libagg)
>
> [...]
>
> target_link_libraries(libcanvas ${AGG_LIBRARIES})
> target_include_directories(libcanvas PUBLIC
> ${PROJECT_SOURCE_DIR}/include ${AGG_INCLUDE_DIRS})
> [...]
>
> When I run pkg-config everything is correct:
>
>> pkg-config --libs libagg
> -Lc:/fra/local_msys64/lib -lagg -lm
>
> One can notice that pkg-config provides a non-standard path for the library.
>
> By inspecting CMakeCache.txt I found a trace of the library's path.
> See below an extract:
>
> AGG_CFLAGS:INTERNAL=-Ic:/fra/local_msys64/include/agg2
> AGG_CFLAGS_I:INTERNAL=
> AGG_CFLAGS_OTHER:INTERNAL=
> AGG_FOUND:INTERNAL=1
> AGG_INCLUDEDIR:INTERNAL=c:/fra/local_msys64/include/agg2
> AGG_INCLUDE_DIRS:INTERNAL=c:/fra/local_msys64/include/agg2
> AGG_LDFLAGS:INTERNAL=-Lc:/fra/local_msys64/lib;-lagg;-lm
> AGG_LDFLAGS_OTHER:INTERNAL=
> AGG_LIBDIR:INTERNAL=c:/fra/local_msys64/lib
> AGG_LIBRARIES:INTERNAL=agg;m
> AGG_LIBRARY_DIRS:INTERNAL=c:/fra/local_msys64/lib
> AGG_LIBS:INTERNAL=
> AGG_LIBS_L:INTERNAL=
> AGG_LIBS_OTHER:INTERNAL=
> AGG_LIBS_PATHS:INTERNAL=
> AGG_PREFIX:INTERNAL=c:/fra/local_msys64
> AGG_STATIC_CFLAGS:INTERNAL=-Ic:/fra/local_msys64/include/agg2
> AGG_STATIC_CFLAGS_I:INTERNAL=
> AGG_STATIC_CFLAGS_OTHER:INTERNAL=
> AGG_STATIC_INCLUDE_DIRS:INTERNAL=c:/fra/local_msys64/include/agg2
> AGG_STATIC_LDFLAGS:INTERNAL=-Lc:/fra/local_msys64/lib;-lagg;-lm
> AGG_STATIC_LDFLAGS_OTHER:INTERNAL=
> AGG_STATIC_LIBDIR:INTERNAL=
> AGG_STATIC_LIBRARIES:INTERNAL=agg;m
> AGG_STATIC_LIBRARY_DIRS:INTERNAL=c:/fra/local_msys64/lib
> AGG_STATIC_LIBS:INTERNAL=
> AGG_STATIC_LIBS_L:INTERNAL=
> AGG_STATIC_LIBS_OTHER:INTERNAL=
> AGG_STATIC_LIBS_PATHS:INTERNAL=
> AGG_VERSION:INTERNAL=2.5.0
> AGG_libagg_INCLUDEDIR:INTERNAL=
> AGG_libagg_LIBDIR:INTERNAL=
> AGG_libagg_PREFIX:INTERNAL=
> AGG_libagg_VERSION:INTERNAL=
>
> but in the Ninja build file the library's path is not given (below an extract):
>
> ----------
> #############################################
> # Link the executable tests\test-window.exe
>
> build tests/test-window.exe: CXX_EXECUTABLE_LINKER__test-window tests/CMakeFiles
> /test-window.dir/test-window.cpp.obj | win32/liblibcanvaswin32.a src/liblibcanva
> s.a || src/liblibcanvas.a win32/liblibcanvaswin32.a
>    LINK_LIBRARIES = win32/liblibcanvaswin32.a src/liblibcanvas.a -lagg
> -lm -lfreetype -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32
> -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
> ------------
>
> So the behavior of CMake looks wrong to me. Pkg-config is giving
> explicitly a non-standard library path but CMake just decided to not
> include it in the linker options.
>
> To finish let me report that I'am using CMake 3.11.1 on a Windows
> system using MSYS2.
>
> I can also mention that a similar Meson build just works fine but this
> is only to make you, CMake guys, jealous.
>
> Ok, just kidding :-)
>
> Thank you in advance for any help.
>
> Kind regards
> Francesco
>
>
>
>
>



More information about the CMake mailing list