CMakeLists.txt生成链接第三方动态链接库的用法
一. 使用find_package
链接
如果 CMake 通过find_package找到一个包,它会自动创建几个CMake的环境变量,包括以下:
- <NAME>_FOUND, 如果找到该值为true,否则为false.
- <NAME>_INCLUDE_DIRS 或 <NAME>_INCLUDES, 包导出的包含路径.
- <NAME>_LIBRARIES 或 <NAME>_LIBS, 包导出的库
所以,只有使用find_package时,才能使用 ${<NAME>_INCLUDE_DIRS},或者 ${<NAME>_LIBRARIES} 这种变量.
示例:以OpenCV
库为例
find_package(OpenCV REQUIRED)
# OpenCV_INCLUDE_DIRS 是由于使用了find_package命令,CMake就会自动定义该变量,该变量代表OpenCV库的头文件夹路径
include_directories(${OpenCV_INCLUDE_DIRS})
# OpendCV_LIBS 来源同上,该变量代表了 OpenCV库的库文件路径, 注意,这里不是文件夹三个字。
target_link_libraries(MY_TARGET_NAME ${OpenCV_LIBS})
find_package
的优点是可以批量引入, 由于库的头文件路径 或者库文件路径不止一个,但是find_package
可以将多个头文件路径整合为 <NAME>_INCLUDE_DIRS
, 将多个库文件路径整合为 <NAME>_LIBRARIES
。