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 -- Francesco -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake