尝试将Boost库添加到Cmake.txt(Clion Ide)

时间:2016-03-24 23:49:49

标签: boost cmake

我看到很多与此类似的问题虽然不尽相同。

我在使用Clion I Cmake获得认可/工作的问题时,我尝试了一些方法,包括Clion附带的incboost模板,继续前进。

Cmake 3.4版 提升版本1.60.0

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

这是我上面提到的自动生成的incboost,这不会产生任何结果。

第二次尝试是以下

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

我的第三次尝试产生了这个

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

最后,这里给出的解决方案How do you add boost libraries in CMakeLists.txt没有改变我的错误输出。

1 个答案:

答案 0 :(得分:2)

以下是我在项目中以便携方式使用它的方法:

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()

您有时需要指定Boost_USE_STATIC_LIBSBoost_USE_MULTITHREAD变量来帮助find_package找到提升。

另请指定使用set(BOOST_ROOT, $path)来增强库的正确路径。此外,在find_package中指定所需的boost包。例如

find_package(Boost REQUIRED COMPONENTS date_time filesystem thread regex)

如果您只需要date_time filesystem thread regex个套餐

让我知道它是否有效。