繁体   English   中英

在cmake c ++项目中包含库的首选方法是什么?

[英]What's the preferred way to include a library in a cmake c++ project?

我已经构建了libfreenect2库,现在我想将它包含在我的c ++项目中。 之前,我已经在cmake中包含了一些像这样的库:

# Include OpenCV
find_package( OpenCV REQUIRED )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )

这意味着必须将库正确“安装”到我的系统才能让cmake找到它,对吗?

但是,这次我需要“手动”将必要的文件和目录包含到我的项目中。 但我不知道如何“正确”地做到这一点。

一直在关注本教程 ,但令人困惑的是如何添加库,包含目录,添加子目录(为什么它突然“添加”而不是“包含”),链接库......术语是否不一致,或者总是方法真的这么乱吗? 我不明白为什么仅仅表达库目录ONCE是不够的,然后cmake应该弄清楚该怎么办呢? 抱歉我的无知。

无论如何,包含定制构建库的首选步骤是什么?

这是我目前的尝试,(当我尝试编译我的项目时)产生“找不到-lfreenect2”

project(kinect-test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)

add_executable(${PROJECT_NAME} ${SRC_LIST})

# Include directories
include_directories ($ENV{HOME}/freenect2/include)

# Find freenect package
set(freenect2_DIR $ENV{HOME}/freenect2/lib/cmake/freenect2)
find_package(freenect2 REQUIRED)
target_link_libraries (${PROJECT_NAME} freenect2)

您需要指定可以找到给定库的搜索路径。 我假设文件libfreenect.so (或libfreenect.a )位于/path/to/freenect - 请根据需要进行编辑,可能使用变量。 target_link_libraries命令上方添加命令:

link_directories(/path/to/freenect)

这就是我最终做的事情:

  • 设置cmake前缀以使其能够找到配置文件(名为“freenect2Config.cmake”)
  • “查找”“包”,这使得cmake运行“查找脚本”
  • 包含目录以获取标头
  • 链接库文件

的CMakeLists.txt

project(kinect-test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)

add_executable(${PROJECT_NAME} ${SRC_LIST})

# Set cmake prefix path to enable cmake to find freenect2
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{HOME}/freenect2/lib/cmake/freenect2)

# Find freenect, to set necessary variables
find_package(freenect2 REQUIRED)

# Include directories to get freenect headers
include_directories($ENV{HOME}/freenect2/include)

# Link freenect libraries with the project
target_link_libraries(${PROJECT_NAME} ${freenect2_LIBRARIES})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM