我的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) 我的机器上安装了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.我会感激任何帮助.谢谢.
我安装了多个版本的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还在寻找旧版本?
我想要以下结构A -> B -> C,其中:
C 是样板代码、第三方库的包装器、非常基本的代码等。 B 是特定于项目域的公共类、函数和数据结构。A 是项目本身。我想让它易于重用C或B(+C)将来在我的其他项目中使用。此外,我还有以下要求:
C,C+B并C+B+A一个炮打响。C和C+B将静态库,并且C+B+A将可执行A,B或C文件系统中的位置,它不需要更改多于几行,那就太好了。我对 cmake 很陌生,我什至不明白写文件XXXConfig.cmake或FindXXX.cmake文件更好。另外,我不确定,我应该如何使用X_INCLUDE_DIRS.