Trouble linking Boost library in CmakeList

时间:2017-06-15 10:01:53

标签: c++ boost cmake arm dependencies

Hello I am having troubles with CmakeList and dependencies to Boost. My CmakeList looks like this:

cmake_minimum_required(VERSION 2.8.3)
project(cpp_arm)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
    moveit_core
)

find_package(Boost REQUIRED COMPONENTS 
    system
    filesystem 
    date_time 
    thread
)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})

add_executable(hello_world src/hello_world.cpp)
add_executable(test_arm src/test_arm.cpp)

target_link_libraries(cpp_arm ${Boost_LIBRARIES})


install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
  PATTERN "setup_assistant.launch" EXCLUDE)
install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})

First I had troubles with this where I couldn´t finish catkin_make. I did not have the following code:

target_link_libraries(cpp_arm ${Boost_LIBRARIES})

This gave me the following error:

CMakeFiles/test_arm.dir/src/test_arm.cpp.o: In function `_GLOBAL__sub_I_main':
test_arm.cpp:(.text.startup+0x43): undefined reference to `boost::system::generic_category()'
test_arm.cpp:(.text.startup+0x48): undefined reference to `boost::system::generic_category()'
test_arm.cpp:(.text.startup+0x4d): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

After looking that error up I have found different topics on this (on stack) saying you need to link the boost library in the cmakelist to let cmake "find" it. I did that as my code shows (accordingly to the syntax described in the mentioned topics) but this results in a new error:

CMake Error at cpp_arm/CMakeLists.txt:25 (target_link_libraries):
  Cannot specify link libraries for target "cpp_arm" which is not built by
  this project.

When I looked up that error I mainly saw topics saying the syntax of the link libraries was not correct, problem is that my syntax is the same as those mentioned in the topics as solutions.

Why do I get this error and how can I fix this?

Thanks in advance

Edit: I see there is some confusion about what my project actually is. I am running a ROS package that was created through the MoveIT setup assistant which generates a package for ROS in my catkin_workspace. Inside this workspace my package folder is located with the name cpp_arm. Inside this package/folder is my CmakeList and inside this folder is also a folder src which contains a simple c++ file (test_arm.cpp).

This cpp file looks like this:

#include <moveit/move_group_interface/move_group_interface.h>

main()
{

}

I am running ROS kinetic version on Ubuntu 16.04

1 个答案:

答案 0 :(得分:3)

target_link_libraries works on targets created with add_library and add_executable: cpp_arm is the name of your project, but you have no targets created with this name. Something like this:

add_executable(cpp_arm ...)
target_link_libraries(cpp_arm ${Boost_LIBRARIES})

But I guess what you're trying to achieve is more to link test_arm:

add_executable(test_arm src/test_arm.cpp)

target_link_libraries(test_arm ${Boost_LIBRARIES})

By the way, instead of:

add_compile_options(-std=c++11)

Let CMake handle the compile options according to the selected standard:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Also consider compile features.