suroh
suroh

Reputation: 917

Trying to add Boost libraries to Cmake.txt (Clion Ide)

I see a lot of questions that are similar to this though not the same.

I'm having an issue getting boost recognized/working in Cmake using Clion I've tried a handful of ways including the incboost template included with Clion, moving on.

Cmake version 3.4 Boost version 1.60.0

find_package(Boost)
  if (Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIR})
endif()

That's the auto generated incboost I mentioned above, This produces no results.

Second attempt is the following

set(Boost_Dir "C:\\Program Files (x86)\\boost_1_60_0\\")
find_package(Boost 1.60.0 COMPONENTS filesystem)
include_directories(${Boost_Dir})

CmakeFiles\Svp.dir/objects.a(main.cpp.obj): 
In function`_static_initialization_and_destruction_0':

C:/PROGRA~2/BOOST_~1/boost/system/error_code.hpp:221: undefined reference 
to `boost::system::generic_category()'

C:/PROGRA~2/BOOST_~1/boost/system/error_code.hpp:222: undefined 
reference to `boost::system::generic_category()'

C:/PROGRA~2/BOOST_~1/boost/system/error_code.hpp:223: undefined
reference to `boost::system::system_category()'

collect2.exe: error: ld returned 1 exit status

mingw32-make.exe[3]: *** [Svp.exe] Error 1

CMakeFiles\Svp.dir\build.make:96: recipe for target 'Svp.exe' failed

CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Svp.dir/all' failed

mingw32-make.exe[2]: *** [CMakeFiles/Svp.dir/all] Error 2

CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Svp.dir/rule' failed

mingw32-make.exe[1]: *** [CMakeFiles/Svp.dir/rule] Error 2

Makefile:117: recipe for target 'Svp' failed

mingw32-make.exe: *** [Svp] Error 2

My Third attempt produces this

set(boost "C:\\Program Files (x86)\\boost_1_60_0\\boost\\")
INCLUDE_DIRECTORIES(${boost})

 fatal error: boost/filesystem/config.hpp: No such file or directory
 #  include <boost/filesystem/config.hpp>
                                     ^
compilation terminated.
mingw32-make.exe[3]: *** [CMakeFiles/Svp.dir/main.cpp.obj] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/Svp.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/Svp.dir/rule] Error 2

And finally the solutions given here How do you add boost libraries in CMakeLists.txt have not changed my error output.

Upvotes: 1

Views: 1153

Answers (1)

J-Mik
J-Mik

Reputation: 896

here's how I use it, in a portable way, in my projects:

if (WIN32)
    set(BOOST_ROOT "C:/Program Files (x86)/boost_1_60_0/")
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_MULTITHREAD ON)

    include_directories(${BOOST_ROOT})
    link_directories(${BOOST_ROOT}/stage/lib) # add this before add_executable()
endif()

# Here call your add_executable method
# add_executable(TARGET_NAME ... )

if(NOT MSVC)
    find_package(Boost REQUIRED COMPONENTS date_time filesystem wserialization system serialization thread regex)

    if (Boost_FOUND)
        include_directories(${Boost_INCLUDE_DIRS})
        target_link_libraries(TARGET_NAME ${Boost_LIBRARIES})
    endif()
endif()

You sometime need to specify the Boost_USE_STATIC_LIBS and Boost_USE_MULTITHREAD variables to help find_package find boost.

Also please specify the correct path to boost library with set(BOOST_ROOT, $path). Moreover, specify the boost packages you need in find_package. For instance

find_package(Boost REQUIRED COMPONENTS date_time filesystem thread regex)

if you only need the date_time filesystem thread regex packages

let me know if it works or not for you.

Upvotes: 2

Related Questions