CMake如何添加第三个库

时间:2019-03-01 05:57:59

标签: c++ cmake

我是CMake领域的新手,我想从OpenMVG官方示例中汇编一个示例。但是,我不知道如何通过CMake链接第三个库。以下是我要编译的C ++文件的一部分。

#include "openMVG/features/feature.hpp"
#include "openMVG/features/sift/SIFT_Anatomy_Image_Describer.hpp"
#include "openMVG/features/svg_features.hpp"
#include "openMVG/image/image_io.hpp"
#include "openMVG/image/image_concat.hpp"
#include "openMVG/matching/regions_matcher.hpp"
#include "openMVG/matching/svg_matches.hpp"
//
#include "third_party/stlplus3/filesystemSimplified/file_system.hpp"

#include <cstdlib>
#include <string>
#include <iostream>

我的CMake文件如下。

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -std=c++11")
add_executable(openMVG_sample_features_siftPutative siftmatch.cpp)
find_package(Eigen3 3.3 REQUIRED)
target_link_libraries(openMVG_sample_features_siftPutative
  openMVG_image
  openMVG_features
  openMVG_matching
  Eigen3::Eigen
  ${STLPLUS_LIBRARY})
target_compile_definitions(openMVG_sample_features_siftPutative
  PRIVATE -DTHIS_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
set_property(TARGET openMVG_sample_features_siftPutative PROPERTY FOLDER OpenMVG/Samples)

但是,我不能让cmake查找"third_party/stlplus3/filesystemSimplified/file_system.hpp"的文件。我已经尝试了好几次,但总是收到file_system.hpp is not found

的错误消息

1 个答案:

答案 0 :(得分:0)

就像YaleCheung说的那样,您没有通往收录的路径。

现在第二个问题是您没有向项目提供所用方法的编译对象(来自3rdlib包括)。 要解决此问题,就像对eigen3库所做的一样,在该库中,您具有一个find_package(肯定地)定义了在何处查找include和lib的库,您应该具有与third_party库相同的库。 所以我要补充:

  1. include_directories($ {thirdLib_INCLUDE_DIRS})#我让您定义此变量(可以在配置过程中定义)
  2. 然后:我认为您的链接问题来自$ {STLPLUS_LIBRARY}可能不包含路径和lib的事实。尝试在cmakelist中“ message()”查看变量$ {STLPLUS_LIBRARY}的内容