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

时间:2016-06-10 07:55:22

标签: c++ cmake

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

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

这意味着图书馆必须正确安装"到我的系统让cmake找到它,对吗?

但是,这次我需要手动"在我的项目中包含必要的文件和目录。但我不知道"正确"这样做的方法。

一直关注this tutorial,但令人困惑的是如何添加库,包含目录,添加子目录(为什么突然出现"添加"而不是"包含& #34;),链接库......术语是否不一致,或者方法总是真的这么混乱?我不明白为什么仅仅表达库目录 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)

2 个答案:

答案 0 :(得分:0)

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

link_directories(/path/to/freenect)

答案 1 :(得分:0)

这就是我最终做的事情:

  • 设置cmake前缀以使其能够找到配置文件(名为" freenect2Config.cmake")
  • "查找与#34; "包",这使得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})