Eclipse和ROS的CMakeLists.txt

时间:2013-07-06 08:53:21

标签: eclipse cmake eclipse-cdt ros

我一直在做一个有很多类(包括cpp和头文件)的项目和一个有int main的可执行文件cpp。使用ROS,我试图将它们与CMakeLists.txt和运行时链接起来,我打算编译它而不必每次都更改txt。这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
rosbuild_init()
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

rosbuild_add_library(${PROJECT_NAME} Im_Basibos.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_HedefeGitme.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Konum.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Robot.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Sonar.cpp)

rosbuild_add_executable(srctest Im_RobotKontrol.cpp)

我不知道如何链接头文件,我必须链接这些:

Im_Basibos.h, Im_Basibos.cpp
Im_HedefeGitme.h, Im_HedefeGitme.cpp
Im_Konum.h, Im_Konum.cpp
Im_Robot.h, Im_Robot.cpp
Im_Sonar.h, Im_Sonar.cpp

and

Im_Robot.cpp that has int main()

任何答案都将不胜感激。谢谢你..

2 个答案:

答案 0 :(得分:3)

我猜rosbuild_add_library的工作方式与add_library的工作方式相同,并不意味着您使用它的方式。它的目的是创建静态或共享库,而不是构建目标文件。

我给你两种可能的方法来构建你的可执行文件。

版本1

如果您只需要构建可执行文件srctest而没有单独的库。

您需要做的是在一些变量中列出您的源文件,例如srctest_SOURCES

set(srctest_SOURCES Im_Basibos.cpp Im_HedefeGitme.cpp
                    Im_Konum.cpp Im_Robot.cpp Im_Sonar.cpp
                    Im_RobotKontrol.cpp)

然后将这些源构建为可执行文件:

add_executable(srctest ${srctest_SOURCES})

第2版

现在,如果您真的想首先构建一个库,请说testlib然后将其链接到您的srctest可执行文件,也可以这样做:

set(testlib_SOURCES Im_Basibos.cpp Im_HedefeGitme.cpp
                    Im_Konum.cpp Im_Robot.cpp Im_Sonar.cpp)

add_library(testlib ${srctest_SOURCES})

add_executable(srctest Im_RobotKontrol.cpp)
target_link_libraries(srctest testlib)

答案 1 :(得分:0)

感谢Guillaume的方法, 由于我正在使用ROS环境, 这个技巧的确切命令是:

rosbuild_add_library(${PROJECT_NAME} Im_Basibos.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_HedefeGitme.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Konum.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Robot.cpp)
rosbuild_add_library(${PROJECT_NAME} Im_Sonar.cpp)

rosbuild_add_executable(srctest Im_RobotKontrol.cpp)

target_link_libraries(srctest ${PROJECT_NAME})