使用 cmake 增强链接

Posted

技术标签:

【中文标题】使用 cmake 增强链接【英文标题】:Boost linking using cmake 【发布时间】:2014-08-08 09:32:56 【问题描述】:

我使用的是 linux,我的 CMakeList.txt 文件是

    cmake_minimum_required(VERSION 2.8)
    set(Boost_INCLUDE_DIR /usr/local/include)
    set(Boost_LIBRARY_DIR /usr/local/lib)
    set(CMAKE_CXX_FLAGS "-lboost_program_options")
    find_package(Boost 1.55 COMPONENTS system program_options filesystem REQUIRED)
    include_directories($Boost_INCLUDE_DIR)
    link_directories($Boost_LIBRARY_DIR)
    if(NOT Boost_FOUND)
    message(FATAL_ERROR "boost not found")
    endif()
    add_executable(main main.cpp)
    target_link_libraries( main $Boost_LABRARIES )

我收到以下错误。我从两天开始就开始工作,现在我厌倦了。任何人都可以帮助我吗.cmake_

错误:

 main.cpp:(.text+0x1d): undefined reference to     
`boost::program_options::options_description::m_default_line_length'
 main.cpp:(.text+0x28): undefined reference to                                       
 `boost::program_options::options_description::m_default_line_length'

  main.cpp:(.text+0x6a): undefined reference to  
  `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'

  collect2: error: ld returned 1 exit status
  make[2]: *** [main] Error 1
  make[1]: *** [CMakeFiles/main.dir/all] Error 2
   make: *** [all] Error 2

【问题讨论】:

【参考方案1】:

您有一个错字:Boost_LABRARIES 应该是 Boost_LIBRARIES。您还应该删除 SET(CMAKE_CXX_FLAGS ... 行,在使用 CMake 时不需要链接到库(无论如何它都是不可移植的。)

【讨论】:

以上是关于使用 cmake 增强链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 如何静态链接一些库和动态链接其他库?

如何使用cmake生成基于静态库的动态链接库

CMake - 更改共享库链接选项

使用 c++/cmake 链接静态库

如何使用 CMake 链接库?

[cmake]如何使用 cmake 在 windows 上包含和链接系统库