【发布时间】:2016-06-10 07:55:21
【问题描述】:
我已经构建了 libfreenect2 库,现在我想将它包含在我的 c++ 项目中。之前,我在 cmake 中包含了一些库,如下所示:
# Include OpenCV
find_package( OpenCV REQUIRED )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )
这意味着该库必须正确“安装”到我的系统中,cmake 才能找到它,对吗?
但是,这一次我需要“手动”将必要的文件和目录包含到我的项目中。但我不知道如何“正确”地做到这一点。
一直在关注this tutorial,但令人困惑的是我必须如何添加库、包含目录、添加子目录(为什么突然“添加”而不是“包含”)、链接库......术语是否不一致,或者这种方法真的总是这么乱吗?我不明白为什么仅仅表达库目录 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)
【问题讨论】:
-
我无法告诉您通常首选的方式,但我所做的是拥有一个 cmake 脚本库,可以在构建树中下载并构建所需的库。如果您愿意提供帮助,我已经启动了一个开源项目! github.com/madmongo1/sanity
-
谢谢,但是添加一个 cmake 脚本库来查找我的库让我感到困惑。我很乐意为您的项目提供帮助,但我想在这个阶段我可能弊大于利。也许以后,当我了解如何实际使用 cmake 时......
-
命令
find_package(freenect2 REQUIRED)设置变量,描述库。变量freenect2_LIBRARIES包含要链接的库,变量freenect2_INCLUDE_DIRS包含其听众所在的目录。您需要在脚本中使用这些变量:include_directories(${freenect2_INCLUDE_DIRS})、target_link_libraries(${PROJECT_NAME} ${freenect2_LIBRARIES})。顺便说一句,你对 OpenCV 做的完全一样。 -
按照你的建议做了(见帖子的编辑3)。仍然,同样的错误。
-
可能复制到Building with libfreenect2。对于像
freenect2这样的启用 CMake 的项目,您所做的是正确的。只需将find_package()命令移到顶部(在project()命令后面)。freenect2_变量仅在find_package()命令之后定义。并做target_link_libraries(${PROJECT_NAME} ${freenect2_LIBRARIES})。