相关疑难解决方法(0)

如何使用CMake将C++程序与Boost链接起来

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

运行期间显示的错误make:

main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
Run Code Online (Sandbox Code Playgroud)

主文件非常简单:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我成功地做到了.我添加到CMake文件的唯一行是:

target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
Run Code Online (Sandbox Code Playgroud)

c++ boost cmake

99
推荐指数
4
解决办法
13万
查看次数

cmake find_package指定路径

我的机器上安装了2个版本的OpenCV.一个在/usr/local/opencv3.1.我假设另一个(版本3.4)的安装位置是/usr/local.无论如何,find_package(OpenCV 3.0 REQUIRED)OpenCV_DIR:PATH=/usr/local/share/OpenCV.该文件夹包含:

haarcascades  OpenCVConfig.cmake          OpenCVModules-release.cmake
java          OpenCVConfig-version.cmake  valgrind_3rdparty.supp
lbpcascades   OpenCVModules.cmake         valgrind.supp
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用版本3.4.如何在CMakeLists.txt中指定使用知道其安装位置的其他版本(3.1)?我试过了:

find_package(OpenCV 3.0 REQUIRED PATH /usr/local/opencv3.1)
Run Code Online (Sandbox Code Playgroud)

哪个返回错误:

Could NOT find OpenCV (missing: PATH /usr/local/opencv3.1) (found suitable version "3.4.1", minimum required is "3.0")
Run Code Online (Sandbox Code Playgroud)

set(OpenCV_DIR /usr/local/opencv3.1/OpenCV/*) # also tried OpenCV_ROOT_DIR, OPENCV_ROOT_DIR
find_package(OpenCV 3.0 REQUIRED)
Run Code Online (Sandbox Code Playgroud)

什么也没做.它仍然找到版本3.4.我会感激任何帮助.谢谢.

c++ linker opencv cmake shared-libraries

13
推荐指数
1
解决办法
2万
查看次数

无法为cmake指定BOOST_ROOT

我安装了多个版本的Boost(Windows 7/MinGW).我需要使用一个特定的(1.53.0).

我在CMakeFiles.txt文件中定义了BOOST_ROOT: SET(BOOST_ROOT C:/boost_1_53_0/)但是我一直收到这个错误:

> cmake .
BOOST_ROOT=C:/boost_1_53_0/
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1191 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.48.0

  Boost include path: C:/Boost/include/boost-1_48

  Detected version of Boost is too old.  Requested version was 1.53 (or
  newer).

  The following Boost libraries could not be found:

          boost_filesystem

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.
Run Code Online (Sandbox Code Playgroud)

我还将BOOST_ROOT定义为环境变量,但结果相同.

为什么cmake还在寻找旧版本?

boost version cmake environment-variables

10
推荐指数
3
解决办法
4万
查看次数

首选cmake项目结构

我想要以下结构A -> B -> C,其中:

  • C 是样板代码、第三方库的包装器、非常基本的代码等。
  • B 是特定于项目域的公共类、函数和数据结构。
  • A 是项目本身。

我想让它易于重用CB(+C)将来在我的其他项目中使用。此外,我还有以下要求:

  1. 由于所有三个项目都在建,我想有建设的能力CC+BC+B+A一个炮打响。
  2. 我宁愿在动态静态链接,这样CC+B将静态库,并且C+B+A将可执行
  3. 我想让 cmake 列表和配置文件保持简单和干净。我在官方维基和互联网上找到的例子非常庞大和可怕。
  4. 如果我更改A,BC文件系统中的位置,它不需要更改多于几行,那就太好了。
  5. 所有这三个组件都在使用 google-test,但我不确定它对项目布局是否重要。

我对 cmake 很陌生,我什至不明白写文件XXXConfig.cmakeFindXXX.cmake文件更好。另外,我不确定,我应该如何使用X_INCLUDE_DIRS.

c++ cmake

3
推荐指数
1
解决办法
3516
查看次数