很多时候我们都要在程序中链接外部库文件,不论是我们自己创建的,还是第三方的(例如OpenCV)。这里介绍如何使用CMake来方便的在项目中链接库文件。
链接自己的创建的库文件
沿用上一个示例中创建的库文件,文件目录:
1 | aincrad@Inspiron:~/Desktop/HelloWorld$ tree |
将库文件放在了lib文件夹中,因为有了库文件所以我们不再需要HelloWorld.cpp。
CMakeLists.txt中的内容:
1 | cmake_minimum_required(VERSION 3.5.1) |
源文件main.cpp中的内容:
1 |
|
链接第三方库文件
CMake提供了一个find_package()
命令来搜寻这些依赖库。比如,如果我们需要链接OpenCV库文件,可以加入以下几条命令:
1 | find_package(OpenCV REQUIRED) |
然后在add_executable()
之后链接库文件:
1 | target_link_libraries(hello ${OpenCV_LIBS}) |
<NAME>_FOUND
,<NAME>_INCLUDE_DIRS
和<NAME>_LIBS
是相应库的.cmake文件中定义好的。
find_package()
并不能保证一定可以找到相应的库,如果找不到,就需要我们手动添加路径了,类Unix系统一般都在/usr/local/include
和/usr/local/lib
路径下。在CMakeLists.txt文件中添加以下路径。
1 | include_directories(/usr/local/include) |
或者如果我们知道库源文件的具体位置(以OpenCV为例),但其没有安装到系统目录中,添加以下命令:
1 | set(OpenCV_DIR /home/aincrad/opencv/_build) |
其中第二个参数是对应库在自己计算机上的路径。
OpenCV示例
文件目录:
1 | aincrad@Inspiron:~/Desktop/opencv$ tree |
CMakeLists.txt中的内容:
1 | cmake_minimum_required(VERSION 3.5.1) |
main.cpp中的内容:
1 |
|
终端中执行以下命令后:
1 | $ mkdir build |
显示出lena的图片:
参考链接
Introduction to CMake by Example
Jermmy’s Lazy Blog–cmake学习笔记
Using OpenCV with gcc and CMake
CMake如何查找链接库—find_package的使用方法
CMake之find_package