Ubuntu下使用cmake命令编译文件

ubuntu18.04环境下,使用cmake命令编译程序
https://github.com/fishCoder/CMakePractice/tree/master/p5-use-library
强烈推荐这份资料,属于小白的cmake学习。

我的任务

我需要做的是:想要使用cmake编写一些测试程序,测试第三方库的编译和运行。
同时,这些第三方库,为简化的,去除了很多用于测试等文件,只剩下动态库文件和头文件。
例如我的cerees库,如下图所示,为so文件和include文件夹中的各头文件。
在这里插入图片描述
在这里插入图片描述
那么,我的任务就是,通过cmake和cmakelists.txt这两个工具,在工程里编写c++文件,然后通过cmake指令,将第三方库的头文件和动态库文件链接到工程中。
经过不断的试探,我把它分成了两部分。

一是头文件的链接,语句为:

INCLUDE_DIRECTORIES(/home/wenhaolun/ubuntu18.04_libs/ceres/include /home/wenhaolun/ubuntu18.04_libs/eigen3)

解释:
将头文件的路径放进去INCLUDE_DIRECTORIES命令,那么cmake就可以自动找到该路径下的头文件了。

二是动态库文件的链接,语句为:

LINK_DIRECTORIES(/home/wenhaolun/ubuntu18.04_libs/ceres /home/wenhaolun/ubuntu18.04_libs/glog)
TARGET_LINK_LIBRARIES(main libceres.so libglog.so)

动态库文件的路径为使用LINK_DIRECTORIES命令搜索,再通过TARGET_LINK_LIBRARIES命令链接到编译文件中。
如果实在无法通过link命令搜索,那么只能将so文件或者a文件放到系统路径中,当然这个操作也很简单,如下:

sudo cp /home/wenhaolun/ubuntu18.04_libs/ceres/libceres.so.2 /usr/lib

放到系统路径后,就只需要target_link_libraries语句了。

三.我的整个cmakelists.txt文件

ADD_EXECUTABLE(main main.cpp)

INCLUDE_DIRECTORIES(/home/wenhaolun/ubuntu18.04_libs/ceres/include /home/wenhaolun/ubuntu18.04_libs/eigen3)

LINK_DIRECTORIES(/home/wenhaolun/ubuntu18.04_libs/ceres /home/wenhaolun/ubuntu18.04_libs/glog)
TARGET_LINK_LIBRARIES(main libceres.so libglog.so)

其中,我是建立了src子文件夹,再在该src文件夹中建立了程序文件,那么,在主目录中同样需要增加一个cmakelists.txt,内容为:

# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 3.10)

# project name
PROJECT(ubuntu18.04_libs)

ADD_SUBDIRECTORY(src) # 添加src子文件夹

整个工程的文件夹下的结构展示

.
│  CMakeLists.txt		# cmake的配置文件
│  
├─build			# 存放 cmake配置生成的文件
├───cmake
│        findcalc.cmake		# 动态库的cmake文件      
│              
└─src		# 主项目的源文件
        main.cpp
        CMakeLists.txt

补充,当你需要使用opencv库时,可以用下面的命令

opencv库

扫描二维码关注公众号,回复: 12405271 查看本文章
set(CMAKE_PREFIX_PATH "/home/User/opencv/install/share/OpenCV")
//set(OpenCV_DIR /home/User/opencv/build/)
find_package(OpenCV REQUIRED)
include_directories(${OPENCV_INCLUDE_DIRS})
target_link_libraries(MAIN ${OpenCV_LIBS})

Module模式(默认方式):
搜索CMAKE_MODULE_PATH指定路径下面的FindXXX.cmake文件,在文件中定义了XXX_INCLUDE_DIRS和XXX_LIBRARIES变量的值。
这里使用的必须是安装了整个库的所有文件,包含有cmake这个文件夹,里面有cmake文件。

猜你喜欢

转载自blog.csdn.net/Wadewhl/article/details/112555043