0
$\begingroup$

Rosanswers logo

Hello,

I'm new to ROS and I have been reading http://www.cse.sc.edu/~jokane/agitr/agitr-letter-pubsub.pdf, to get started on ROS. But the CMakeLists.txt file shown in the book as well as on ROS tutorials don't match with what I am having on my pc. Pardon my ignorance as I'm new to this. Any help is greatly appreciated.

This is the file I have.

cmake_minimum_required(VERSION 2.8.3)
project(agitr)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()
################################################
## Declare ROS messages, services and actions ##
################################################
## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
##   your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
##   * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
##   * If MSG_DEP_SET isn't empty the following dependencies might have been
##     pulled in transitively but can be declared for certainty nonetheless:
##     * add a build_depend tag for "message_generation"
##     * add a run_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
##   * add "message_generation" and every package in MSG_DEP_SET to
##     find_package(catkin REQUIRED COMPONENTS ...)
##   * add "message_runtime" and every package in MSG_DEP_SET to
##     catkin_package(CATKIN_DEPENDS ...)
##   * uncomment the add_*_files sections below as needed
##     and list every .msg/.srv/.action file to be processed
##   * uncomment the generate_messages entry below
##   * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
## Generate messages in the 'msg' folder
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )
## Generate services in the 'srv' folder
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )
## Generate actions in the 'action' folder
# add_action_files(
#   FILES
#   Action1.action
#   Action2.action
# )
## Generate added messages and services with any dependencies listed here
# generate_messages(
#   DEPENDENCIES
#   std_msgs  # Or other packages containing msgs
# )
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES agitr
#  CATKIN_DEPENDS other_catkin_pkg
#  DEPENDS system_lib
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
## Declare a cpp library
# add_library(agitr
#   src/${PROJECT_NAME}/agitr.cpp
# )
## Declare a cpp executable
# add_executable(agitr_node src/agitr_node.cpp)
## Add cmake target dependencies of the executable/library
## as an example, message headers may need to be generated before nodes
# add_dependencies(agitr_node agitr_generate_messages_cpp)
## Specify libraries to link a library or executable target against
# target_link_libraries(agitr_node
#   ${catkin_LIBRARIES}
# )
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# install(PROGRAMS
#   scripts/my_python_script
#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark executables and/or libraries for installation
# install(TARGETS agitr agitr_node
#   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
#   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
#   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
#   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
#   FILES_MATCHING PATTERN "*.h"
#   PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
#   # myfile1
#   # myfile2
#   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_agitr.cpp)
# if(TARGET ${PROJECT_NAME}-test)
#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## Add folders to be run by python nosetests
# catkin_add_nosetests(test)

This is the file in the book(link posted above, pg.44)

1
# What version of CMake i s needed?
2
cmake_minimum_required(VERSION 2.8.3)
3
4
# Name of this package .
5
project ( agitr )
6
7
# Find the catkin build system , and any other packages on
8
# which we depend .
9
find_package ( catkin REQUIRED COMPONENTS roscpp )
10
11
# Declare our catkin package .
12
catkin_package ()
13
14
# Specify locations of header f i l e s .
15
include_directories ( include ${catkin_INCLUDE_DIRS})
16
17
# Declare the executable , along with i t s source f i l e s . I f
18
# there are multiple executables , use multiple copies of
19
# this line .
20
add_executable ( hello hello . cpp)
21
22
# Specify l i b r a r i e s against which to link . Again , this
23
# line should be copied for each distinct executable in
24
# the package .
25
target_link_libraries ( hello ${catkin_LIBRARIES})

edit 1.

CMakeLists.txt (@andromeda this is the edited file)

cmake_minimum_required(VERSION 2.8.3)

project ( agitr )

find_package ( catkin REQUIRED COMPONENTS roscpp )

catkin_package ()

include_directories ( include ${catkin_INCLUDE_DIRS})

add_executable ( hello hello.cpp)

target_link_libraries ( hello ${catkin_LIBRARIES})

code : #include < ros/ros.h >

int main( int argc , char ∗∗argv ) {

// Initialize the ROS system.

ros :: init ( argc , argv , " hello_ros ") ;

// Establish this program as a ROS node.

ros :: NodeHandle nh;

// Send some output as a log message.

ROS_INFO_STREAM("Hello , ␣ROS! ") ; }


edit 2

cpp

#include < ros/ros.h>

int main(int argc, char **argv)

{ ros::init(argc,argv,"hello_ros");

ros::NodeHandle nh;

ROS_INFO_STREAM("HEllo ROS"):

}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)

project(agitr)

find_package(catkin REQUIRED COMPONENTS roscpp)

catkin_package()

include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(hello hello.cpp)

target_link_libraries(hello ${catkin_LIBRARIES})


Originally posted by lffox on ROS Answers with karma: 7 on 2014-09-02

Post score: 0


Original comments

Comment by lffox on 2014-09-03:
@Martin Thanks for formatting. Kindly tell me what option you used. I tried to do this while posting, but never managed.

Comment by Martin Peris on 2014-09-03:
@grimreaper no problem! The easiest way to add code highlighting to your post is selecting the code and hitting ctrl+k

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

The CMakeLists.txt that you posted is the default file created by catkin when making a new package. It is always the same (not really true, but for a beginner is not a prob)

You have 2 choices:

  1. leave the file as it is and just update the field in the file as reported in the book you posted at paragraph: 3.2.2 Compiling the Hello program
  2. remove completely the file in you folder, create a CMakeLists.txt on your own and copy the content form the book.

To me is much better the first option....slowly you get an idea on what is waiting for you in the future :) :) :)

EDIT: There are 2 mistakes in your code:

  1. you should remove in hello.cpp the space between < and ros For istance: #include <ros/ros.h>
  2. at the last line you put : but it must be ;

Clear now?


Originally posted by Andromeda with karma: 893 on 2014-09-02

This answer was ACCEPTED on the original site

Post score: 2


Original comments

Comment by lffox on 2014-09-03:
Hello, Thanks for your reply. I edited the CMakeLists.txt (as in 2. in your ans) and tried catkin_make, but I got the folllowing error. make[2]: *** [agitr/CMakeFiles/hello.dir/hello.cpp.o] Error 1 make[1]: *** [agitr/CMakeFiles/hello.dir/all] Error 2 make: *** [all] Error 2 Invoking "make" failed

Comment by Andromeda on 2014-09-03:
Did you copy the code from the pdf file without removing the line code number before? In the text every line is numbered..pay attention. That number must be removed in your file

Comment by Andromeda on 2014-09-03:
Since I cannot write too much in this comment edit your original question with the code that you really are trying to compile

Comment by lffox on 2014-09-03:
Please check the edit. I have added my CmakeLists.txt and the cpp code.

Comment by Andromeda on 2014-09-03:
Ok, it is clear....you copied too many unnecessary symbols. Please delete your .cpp and CMakeLists.txt and TYPE your self every single letter with the keyboard as in the book. Ok?

Comment by Andromeda on 2014-09-03:
between a command and the argument there is no space. for istance: add_executable( hello hello.cpp) # and not add_executable ( hello hello.cpp) # see you the space befor the () symbols?

Comment by lffox on 2014-09-03:
I still get the same error. Removed all white spaces. adding the edit to the question.

Comment by lffox on 2014-09-03:
@andromeda any idea why?

Comment by Andromeda on 2014-09-03:
Yes, there are 2 mistakes in your code:

  • hello.cpp: write #include <ros/ros.h> without any space between < and ros

Then you wrote : and not ; at the last line.

Have you never programmed before?

Comment by lffox on 2014-09-04:
The space was intentional, for the post, here. Without it the code wasn't coming out the way I wanted in this forum. I missed out that semi colon. I feel like an idiot. I'm not a programmer, I usually code in matlab where white spaces and ; are not much of an issue. My C++ is a lil rusty.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.