pkg-config is a tool that originated in Linux to view the meta information about installed libraries. It can be used to know things like:
- include path of header files
- link path of library files
- version of library
- etc.
When a library is built or installed, usually a .pc meta file is produced. .pc file contains all meta information such as link path, etc. For pkg-config to work with the library, the .pc file must be placed in the correct search location (PKG_CONFIG_PATH environment variable).
Example use
Say I want to use libpng to work with png images. I install libpng via say homebrew and now want to use it in my project as a library. How can I do that?
- 
    First let’s see what version of libpngdo I have
 $ pkg-config --modversion libpng
 1.6.43
- 
    Ok good. Where can I find the header files for libpng
 $ pkg-config --cflags libpng
 -I/opt/local/include/libpng16 -I/opt/local/include
- 
    Nice. What about the path of libraries to link? 
 $ pkg-config --libs libpng
 -L/opt/local/lib -lpng16
With these information I can easily use the library with my project like: 
gcc pngViewr.c -o pngViewr -I/opt/local/include/libpng16 -I/opt/local/include -L/opt/local/lib -lpng16
or even better: 
gcc pngViewr.c -o pngViewr $(pkg-config --libs -cflags libpng)