c++ - CMake 添加库

标签 c++ cmake vtk

我目前只是想将一个库添加到 example 之一对于VTK。 因此,让我们想象一下,我们有这样的场景,我想重新定义行为或轨迹球。我所做的是创建自己的轨迹球(基于 vtkInteractorStyleTrackballCamera 提供的模型)。所以我创建了两个文件:InteractorStyleTrackballCamera.cpp 和 InteractorStyleTrackballCamera.h

当我 CMake 时,一切都很好。但是,当我使用 Visual Studio 2013 打开解决方案并尝试构建 all_build 目标时,我收到一条错误消息:

InteractorStyleTrackballCamera.h no such file or directory.

我当然知道这意味着什么,但是我不明白为什么会出现这个错误。可能是我的 CMakeLists.txt 有点损坏(这是我唯一能想到的),所以这里是:

cmake_minimum_required(VERSION 2.8)

PROJECT(TrackballCamera)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(TrackballCamera MACOSX_BUNDLE TrackballCamera)
add_library(InteractorStyleTrackballCamera InteractorStyleTrackballCamera.cpp InteractorStyleTrackballCamera.h)

if(VTK_LIBRARIES)
  target_link_libraries(TrackballCamera ${VTK_LIBRARIES})
else()
  target_link_libraries(TrackballCamera vtkHybrid vtkWidgets InteractorStyleTrackballCamera)
endif()

当我在 VS13 中查看解决方案资源管理器时,我可以清楚地看到 4 个解决方案,ALL_BUILD , InteractorStyleTrackballCamera (带有标题和cpp)TrackballCameraZERO_CHECK 。这就是让我困惑的地方。如果 header 包含在我的解决方案资源管理器中,当我尝试构建时应该可以找到它,这不是正确的吗?

哦,如果你想知道我的 InteractorStyleTrackballCamera 里面有什么? (不确定这是否真的与该问题相关)我只是复制/粘贴 vtkInteractorStyleTrackballCamera 的内容并替换了所有 vtkInteractorStyleTrackballCamera通过InteractorStyleTrackballCamera

预先感谢您的帮助。

编辑:错误不是来自文件 InteractorStyleTrackballCamera.cpp但从文件TrackballCamera.cxx当我尝试包含我的标题时。 基本上该行是:

#include <InteractorStyleTrackballCamera.h>

最佳答案

我看到问题已经得到解答。另外,请阅读

的文档

target_include_directories

https://cmake.org/cmake/help/v3.3/command/target_include_directories.html#command:target_include_directories

在 CMAKE 中,您可以为目标注入(inject)属性,并将这些属性传递到依赖于它的目标中。这样的属性之一是“包含目录”。此属性在以下 3 种情况下有所不同:

  1. 您的目标本身正在构建
  2. 您的目标与依赖项位于同一项目中
  3. 您的目标已安装并正在使用 find_package 进行获取

target_include_directories 允许您在所有 3 种情况下设置正确的路径。

另请参阅target_link_libraries,它可用于确保您的库所依赖的库被拉入任何依赖的目标。

还困惑吗?我花了几个月的时间才弄清楚这个问题。一旦我这样做了,我就意识到 CMAKE 有多么强大。

关于c++ - CMake 添加库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33365894/

相关文章:

c++ - 多次更新同一个变量

linux - 使用cmake与工具链文件交叉编译时如何使用find_package?

regex - 如何在 CMake 中删除字符串中的一行文本,解决 CMake 缺乏基于行的正则表达式匹配的问题?

c++ - cLion + Qt5 - 退出代码 -1073741515 (0xC0000135)

python - 如何使用 python 将 3D vtk 渲染场景导出到 paraview?

python - mlab 中的简单箭头 mayavi/tvtk 奇怪的行为(看起来像一个错误)

c# - 为 WP8 平台构建原生 OpenSSL 库

c++ - 路径包含在 Make/options 文件中

c++ - OpenGL - 更新模型信息(例如模型矩阵)的最有效方法

c++ - 使用 ITK 计算图像梯度的错误结果