CMakeLists.txt для Eclipse и ROS

Я выполнял проект со многими классами (включая cpp и файлы заголовков) и один исполняемый файл cpp с int main. С 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()

Любой ответ будет высоко оценен. Спасибо уже..


person mozcelikors    schedule 06.07.2013    source источник


Ответы (2)


Я предполагаю, что 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)
person Guillaume    schedule 06.07.2013
comment
позвольте мне проверить это, пожалуйста, дайте мне время - person mozcelikors; 06.07.2013

Спасибо Гийому за методы. Поскольку я работаю со средой 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}) 
person mozcelikors    schedule 06.07.2013