InteractorStyleTrackballCamera

InteractorStyleTrackballCamera

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

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



我当然知道这意味着什么,但是我不明白为什么会收到此错误。可能是我的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_BUILDInteractorStyleTrackballCamera(带有 header 和cpp)TrackballCameraZERO_CHECK。这就是让我感到困惑的原因。如果 header 包含在我的解决方案资源管理器中,是不是应该在我尝试构建时找到?

哦,如果您想知道自己的InteractorStyleTrackballCamera里面有什么(不确定这与该问题是否确实相关),我只需复制/粘贴vtkInteractorStyleTrackballCamera的内容,然后将所有vtkInteractorStyleTrackballCamera替换为InteractorStyleTrackballCamera
先谢谢您的帮助。

编辑:当我尝试包括 header 时,错误不是来自InteractorStyleTrackballCamera.cpp文件而是来自TrackballCamera.cxx文件。
基本上,该行是:
#include <InteractorStyleTrackballCamera.h>

最佳答案

#include <...>仅应用于包括库头。如果要在源目录中包含头文件,请使用#include "..."

对于大多数编译器,区别在于#include "..."还会在源文件的目录中搜索要包含的文件,而#include <...>仅搜索包含在编译器命令行上指定的目录(可能还包含一些默认目录)。

与原始问题无关,但是在我看来,即使定义了InteractorStyleTrackballCamera,您也应该链接VTK_LIBRARIES:

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

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

10-12 22:53