Add external libraries to CMakeList.txt c++

156,068

I would start with upgrade of CMAKE version.

You can use INCLUDE_DIRECTORIES for header location and LINK_DIRECTORIES + TARGET_LINK_LIBRARIES for libraries

INCLUDE_DIRECTORIES(your/header/dir)
LINK_DIRECTORIES(your/library/dir)
rosbuild_add_executable(kinectueye src/kinect_ueye.cpp)
TARGET_LINK_LIBRARIES(kinectueye lib1 lib2 lib2 ...)

note that lib1 is expanded to liblib1.so (on Linux), so use ln to create appropriate links in case you do not have them

Share:
156,068
Ja_cpp
Author by

Ja_cpp

Student studying in France.

Updated on July 09, 2022

Comments

  • Ja_cpp
    Ja_cpp almost 2 years

    I have my external library as shown in this picture that I create the symbolic links after:

    enter image description here

    and the headers related to the library in other file:

    enter image description here

    I'm working with ROS ubuntu and I need to add these libraries to my package to CmakeList.txt:

    cmake_minimum_required(VERSION 2.4.6)
    include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
    
    rosbuild_init()
    
    #set the default path for built executables to the "bin" directory
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    #set the default path for built libraries to the "lib" directory
    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    
    #common commands for building c++ executables and libraries
    #rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
    #target_link_libraries(${PROJECT_NAME} another_library)
    #rosbuild_add_boost_directories()
    #rosbuild_link_boost(${PROJECT_NAME} thread)
    #rosbuild_add_executable(example examples/example.cpp)
    #target_link_libraries(example ${PROJECT_NAME})
    
    rosbuild_add_executable(kinectueye src/kinect_ueye.cpp)
    

    So my question is how can I add these folders (I think the first one that I need to add I'm not sure) to my CmakeList.txt file so as I can use the classes and the methods in my program.

    • grepsedawk
      grepsedawk almost 7 years
      Screenshots 404
    • Ja_cpp
      Ja_cpp almost 7 years
      @Pachonk it was just a screenshot of files in a folder.. I don't have it anymore
    • Mitja
      Mitja almost 7 years
      404s are why I hate questions containing links.
    • Ja_cpp
      Ja_cpp almost 7 years
      @Mitja When I posted that question I was just created my account so I didn't have enough reputations to post an image in my question without a link. Sorry!
    • Mitja
      Mitja almost 7 years
      Sorry, didn't know about those limitations. To me, it makes no sense to allow new accounts to embed links but not include images. Both can be used for spam, and links even better.. Also, I can't take my downvote from this question anymore as it is now >2hrs old (and, tbh, the question is kind of bad w/o the links working), so take an upvote to another reasonable question of yours instead.
    • Ja_cpp
      Ja_cpp over 6 years
      @Mitja that's okay! I've found the library again and I just edited my post.. thanks for pointing that out.. (@Pachonk)
    • iled
      iled over 6 years
      @Ja_cpp next time use tree or something similar.
    • Trevor Boyd Smith
      Trevor Boyd Smith about 6 years
      Possible duplicate of CMake link to external library
  • Ja_cpp
    Ja_cpp almost 10 years
    Like that INCLUDE_DIRECTORIES(home/jros/roskinectueye/MIXEDVISION/incl‌​ude/MIXEDVISION) LINK_DIRECTORIES(/home/jros/roskinectueye/MIXEDVISION/lib64) rosbuild_add_executable(kinectueye src/kinect_ueye.cpp) TARGET_LINK_LIBRARIES(kinectueye libgsl.so.0.16.0 libgslcblas.so.0.0.0)
  • Peter
    Peter almost 10 years
    TARGET_LINK_LIBRARIES(kinectueye gsl gslcblas ...)
  • Ja_cpp
    Ja_cpp almost 10 years
    I get this error: Linking CXX executable ../bin/kinectueye /usr/bin/ld: cannot find -lgsl /usr/bin/ld: cannot find -lHalf and for all the libraries !
  • Peter
    Peter almost 10 years
    make sure you have symbolic links in your directory libgsl.so -> libgsl.so.0.16.0, etc
  • Ja_cpp
    Ja_cpp almost 10 years
    Yes I have it, as shown in the first image that I post
  • Peter
    Peter almost 10 years
    No you do not, you need libname without "numbers" at the end
  • Peter
    Peter almost 10 years
    create symbolic links
  • Ja_cpp
    Ja_cpp almost 10 years
    I do ! the file become like shortcut .. is that symbolic link ?
  • Ja_cpp
    Ja_cpp almost 10 years
    unfortunately yes, I get Linking CXX executable ../bin/kinectueye /usr/bin/ld: cannot find -lgsl /usr/bin/ld: cannot find -lgslcblas ..... and some others
  • Peter
    Peter almost 10 years
    Please run make VERBOSE=1 and copy here the full link command for kinectueye.
  • Ja_cpp
    Ja_cpp almost 10 years
    I get that: make: *** No targets specified and no makefile found. Stop.
  • Peter
    Peter almost 10 years
    make VERBOSE=1 kinectueye, in the folder where you have generated build system from cmake
  • Peter
    Peter almost 10 years
    Sorry, I will not download the file. Please post it here. Just a link line.
  • Ja_cpp
    Ja_cpp almost 10 years
    Thank you @Peter It works now... I changed my package from Rosbuild to catkin. and concerning the library I change it to *.so.
  • filip
    filip over 5 years
    What's "kinectueye"?