如何使用 CMake 包含一个库,然后在源文件中使用尖括号包含它的 headers?

How to use CMake to include a library, then include its headers using angled brackets in source file?

我用自制软件安装了opencv和openni和nite。

并且我已经设法为 opencv 制作了一个 cmake 文件,不知何故它已经为其目录定义了路径 OpenCV_LIBS,不知道我是如何或在哪里找到的。

cmake_minimum_required(VERSION 2.8)
project( main )
find_package( OpenCV REQUIRED )
add_executable( main main.cpp )

target_link_libraries( main ${OpenCV_LIBS} )

安装toktakke's buildopenni和nite后。 我试了一下,并扩展到以下内容,我再次不确定在哪里可以找到这些目录的别名。

cmake_minimum_required(VERSION 2.8)
project( main )
find_package( OpenCV REQUIRED )
include_directories(${OPENNI_INCLUDE})
Include_directories(${NITE_INCLUDE})
add_executable( main main.cpp)
target_link_libraries( main ${OpenCV_LIBS} ${OPENNI_LIB} ${NITE_LIB} )

但整合得不好

.bash_profile 我有以下内容:

export OPENNI_INCLUDE="/usr/local/Cellar/openni/1.5.7.10/include/ni"
export OPENNI_LIB="/usr/local/Cellar/openni/1.5.7.10/lib"
export OPENNI_DIR="/usr/local/Cellar/openni/1.5.7.10"
export NITE_INCLUDE="/usr/local/Cellar/nite/1.5.2.21/include/nite"
export NITE_LIB="/usr/local/Cellar/nite/1.5.2.21/lib"
export NITE_DIR="/usr/local/Cellar/nite/1.5.2.21"

现在我收到以下错误:

fatal error: 'XnOpenNI.h' file not found
#include <XnOpenNI.h>

您应该添加

include_directories($ENV{OPENNI_INCLUDE})

在您的项目定义之后。这会将路径添加到 OPENNI 包含文件作为编译器的 -I 选项。更多关于 'include_directories' 命令的信息是 here.

关于OpenCV_LIBS的来源:

当使用'find_package( OpenCV REQUIRED )'时,cmake会自动调用FindOpenCV.cmake(在CMAKE_MODULE_PATH变量指定的路径中找到)。 FindOpenCV.cmake 负责实际定位 OpenCV 库和包含文件,并定义 OpenCV_LIBS 和一堆其他变量。

这使它 "magically" 可供您使用。有关 find_package 魔法的更多信息可以在 CMake docs

中找到