我一直在做一个有很多类(包括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()
任何答案都将不胜感激。谢谢你..
答案 0 :(得分:3)
我猜rosbuild_add_library
的工作方式与add_library
的工作方式相同,并不意味着您使用它的方式。它的目的是创建静态或共享库,而不是构建目标文件。
我给你两种可能的方法来构建你的可执行文件。
如果您只需要构建可执行文件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})
现在,如果您真的想首先构建一个库,请说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})