1

我一直在做一个项目,它有很多类(包括 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()

任何答案将不胜感激。已经谢谢了。。

4

2 回答 2

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)
于 2013-07-06T14:23:27.980 回答
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}) 
于 2013-07-06T20:28:02.090 回答