我目前只是想将库添加到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_BUILD
,InteractorStyleTrackballCamera
(带有 header 和cpp)TrackballCamera
和ZERO_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/