find_package如何使用2020年1月12日
今天真是遇到一个超级难搞的问题,谁让我是小白的呢,不过还好解决了。
问题是这样的,创建一个hello.so共享库,这个库里面有一个函数helloSlam()用来输出“hello SLAM”。现在的目标是希望创建一个新的工程,usehello调用hello这个库,有两种方法来引用这个库。
1、include_directories(<包含hello.h在头文件在路径>);link_directories(<包含库文件的路径>)。最后再用target_link_library(usehello hello), add_executable(usehello main.cpp)
2、第二种方法是使用find_package的方法,请看下面代码,
首先要设置find_package的搜索目录,搜索目录设置成hello-config.cmake文件所在的目录。
find_package调用方法待调用的hello库的hello-config.cmake文件就是工程描述文件,解释如何找到hello.h头文件和libhello.so库文件。不管CMAKE_MODULE_PATH定义的是什么,都要保证,在这个定义的目录下能找到hello-config.cmake工程描述文件。另外hello-config.cmake文件描述了在哪里可以找到头文件和库文件,所以可以把头文件和库文件安装到系统目录。
更多有用的信息,参考《CMake实践》。
Cmake规则的使用手册是:https://cmake.org/cmake/help/latest/command/find_library.html?highlight=find_library
SLAM部分
阅读文献综述,past, present, and future of simultaneous localization and mapping: Towards the robust-pereption age.
g++命令有哪些参数?乍么填写参数可以更改生成的程序文件名。
答:g++共有-c, -s, -o, -x, -E参数,分别对应,生成.obj(机器代码), .s(汇编代码),可执行文件,使文件后缀名无效(-x后面加none,表示取消这个功能),-E只激活预处理,不生成代码。
怎么把库链接到可执行程序上?
1、.so或者.a文件放到项目工程自定义的lib目录,把.h头文件放到自定义的include目录下。2、在CMakeLists.txt文件中填写以下INCLUDE_DIRECTORIES()和LIBRIARIES_DIRECTORIES(); 3、链接可执行文件和共享库。target_link_libriaries()
阅读《Cmake实践》了解cmake的其它语法。
如何使用find_package,
ROS部分