为什么要使用PkgConfig
有时候某些第三方库没有提供Cmake的支持,没有办法使用find_package命令找到。这个时候就可以尝试使用pkg-config。大部分的第三方库都会支持pkg-config。
使用方法
首先让CMake找到PkgConfig模块:
| |
然后通过PkgConfig模块找到你想要找到的第三方库,这里我找一下SDL2:
| |
pkg_check_modules可以一次性检查所给的所有模块是否存在。
接下来再使用pkg_search_module找到对应的模块。第一个参数是prefix,第二个参数我填了REQUIRED表示找不到就报错,第三个参数就是模块名字。
找到之后,我们可以使用如下变量来得到模块信息:
<prefix>_FOUND:如果找到模块,此变量为1<prefix>_LIBRARIES:模块的链接库名称(不包含-l)<prefix>_LINK_LIBRARIES:模块的链接库名称(包含绝对路径)<prefix>_LIBRARY_DIRS:模块的链接库路径(不包含-L)<prefix>_INCLUDE_DIRS:模块的头文件路径(不包含-I)<prefix>_LDFLAGS:链接flags<prefix>_LDFLAGS_OTHER:额外的链接flags<prefix>_CFLAGS:所有的编译器cflags<prefix>_CFLAGS_OTHER:其他的编译器cflags
这里我这样写,以让我的工程得以编译:
aux_source_directory(src SRC)
set(SRC ${SRC} main.cpp)
include_directories(include ${SDL2_INCLUDE_DIRS} ${SDL2_image_INCLUDE_DIRS} ${SDL2_mixer_INCLUDE_DIRS} ${SDL2_ttf_INCLUDE_DIRS})
link_directories(${SDL2_LIBRARY_DIRS} ${SDL2_mixer_LIBRARY_DIRS} ${SDL2_ttf_LIBRARY_DIRS} ${SDL2_image_LIBRARY_DIRS})
link_libraries(${SDL2_LIBRARIES} ${SDL2_image_LIBRARIES} ${SDL2_mixer_LIBRARIES} ${SDL2_ttf_LIBRARIES})