否则生成的CMakeLists.txt的信息会有错误。这个留着后期再改进吧,改进也是很简单的,只是现在的Python还不是很熟,我大致翻了一下Document没有找到一个一步到位的处理函数。自己写一个小代码虽然是可以的,但是自己确实是懒,见谅!
一、首先建一个包我的工作空间catkin_ws事先建好了,路径是/home/siat/catkin_ws
然后运行以下命令在src文件夹下建立test包
$ cd ~/catkin_ws/src
$ catkin_create_pkg test roscpp1212
注意在包的名字后加上一些基本的依赖,比如roscpp和rospy这样就可以直接调用C++和Python节点了,这将会在CMakeLists.txt中出现
find_package(catkin REQUIRED COMPONENTS roscpp)11
注意如果没有加依赖,而是直接运行
$ catkin_create_pkg test11
来创建包的,在CMakeLists.txt中是这样的
find_package(catkin REQUIRED)11
在后面编译C++节点的时候将会提示“对各种ros类下的函数未定义的引用”
二、编写节点文件
注释:以 # 开头cmake_minimum_required(VERSION 3.4.1) #设置Cmake最小版本
ADD_EXECUTABLE(exeNme 源码位置) #编译为可执行程序
add_library(libName STATIC 源码位置) # 生成静态链接库
add_library(libName SHARED 源码位置) # 生成动态链接库
SET(变量名 变量值) #设置变量
例如:
SET(srcDir main.c) 等价于 srcDir = "main.c"
SET(srcDir main.c demo.c test.c) 等价于 srcDir = "main.c demo.c test.c"
add_executable(debugger ${srcDir})#用 美元符号 使用变量
include_directories(路径)#设置头文件搜索路径,以CmakeLists.txt所在目录为根目录.
源文件中可以使用 <>来引入自己的头文件了,与引入标准库头文件保持格式的一致
例如:
include_directories(header) 则,源码中使用头文件的时候会从CmakeLists.txt所在目录/header 中去寻找
add_subdirectory(mod1 lib)#执行 mod1/CmakeLists.txt文件,并且把输出文件放在lib文件夹,同时会把lib文件夹作为链接库的搜索位置
link_directories(${PROJECT_SOURCE_DIR}/build/lib)#指明链接库的位置,如果程序要使用链接库,请一定要将此命令尽量写的靠前一些,要不然有时候会找不到链接库.我也不知道为什么....
target_link_libraries(exeName libName)#链接 libName,注意,链接之前要指明链接库的位置,如果libName代表动态链接库,则运行的时候需要把它拷贝到exeName同目录下
如果运行程序涉及到了动态链接库,则运行到时候需要把动态链接库拷贝到运行程序所在的文件夹.
例如:
静态链接库 A
静态链接库 B
动态链接库 C
可执行程序 D
A依赖B和C
D依赖A,
则D运行的时候需要把B和C一起拷贝到其目录下.注意,B是静态的,依然要拷贝过去.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)