c++ - 如何使用 CMake 将 C++ 程序与 Boost 链接

标签 c++ boost cmake

将我的程序与 Ubuntu 下的 Boost 库链接时,我的 CMake 文件应该是什么样的?

运行make时出现的错误:

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

主文件真的很简单:

#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>

namespace po = boost::program_options;

int main(int argc, char** argv) {

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ;

    return 0;
}

我已经做到了。我添加到 CMake 文件中的唯一行是:

target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)

最佳答案

在 CMake 中,您可以使用 find_package 来查找您需要的库。通常有一个 FindBoost.cmake 以及您的 CMake 安装。

据我所知,它将与其他常见库的查找脚本一起安装到 /usr/share/cmake/Modules/。您可以查看该文件中的文档以了解有关其工作原理的更多信息。

我脑海中的一个例子:

FIND_PACKAGE( Boost 1.40 COMPONENTS program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )

ADD_EXECUTABLE( anyExecutable myMain.cpp )

TARGET_LINK_LIBRARIES( anyExecutable LINK_PUBLIC ${Boost_LIBRARIES} )

我希望这段代码有所帮助。

关于c++ - 如何使用 CMake 将 C++ 程序与 Boost 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897839/

相关文章:

c++ - union的用法和乱码

C++ 在 Qt 中传递 Double 添加数字

c++ - 有没有一种标准的方法来为 boost::test 的输出着色

boost - 如何在VS2010中编译Boost 1.39?

自定义目标类型的 CMake include_directories

c++ - 如何正确使用 bool 函数?

c++ - 在 Boost 中使用持续时间合并仅时间

c++ - 非源文件更改时触发构建

android - Windows下Cmake Opencv for Android...找不到iostream

c++ - 将 std::function<int(int)> 赋值给 std::function<const int&(const int& x)>