在cmake中链接(最新)VTK库

问题描述 投票:0回答:1

问题:

我的代码库具有以下结构:

root/
|
|-- main.cpp
|__ CMakeLists.txt
|
|__lib
|  |__ CMakeLists.txt
|  |__ writer.cpp
|
|__physics
   |__..

writer.cpp
使用 VTK 标头编写 .vtk 文件进行模拟。

更新 VTK 库(至 9.0.3)后,我在构建应用程序时面临着合并 VTK 库的挑战。

我正在使用

cmake
来编写我的构建设置。

root/CMakeLists.txt

cmake_minimum_required(VERSION 3.18.0)
message(STATUS "CMake version: ${CMAKE_VERSION}")

PROJECT(root_1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")
file(GLOB cpu_source_files "${CMAKE_SOURCE_DIR}/src/*.cpp")

#---------------------------------------------------
# Includes for VTK libraries
#---------------------------------------------------
find_package(VTK REQUIRED)

ADD_SUBDIRECTORY(lib)
include_directories(${CMAKE_SOURCE_DIR}/src/physics/)

# FINAL TARGET BUILD
vtk_module_autoinit(TARGETS myexe MODULES ${VTK_LIBRARIES})
target_include_directories(myexe PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${VTK_LIBRARIES})

root/lib/CMakeLists.txt

#---------------------------------------------------
# Includes for VTK libraries
#---------------------------------------------------

find_package(VTK REQUIRED)
# include(${VTK_USE_FILE}) # <-- not required with latest VTK

#---------------------------------------------------

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")

#---------------------------------------------------
# Definiing the source locations etc.
#---------------------------------------------------
file(GLOB cpu_source_files "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")

#---------------------------------------------------
# Building executables
#   ****** Note ******** maintain the order
#---------------------------------------------------
add_library(Writers SHARED ${cpu_source_files})
set_property(TARGET Writers PROPERTY POSITION_INDEPENDENT_CODE ON)

#---------------------------------------------------
# Include relative path during compilation
#---------------------------------------------------
vtk_module_autoinit(TARGETS Writers MODULES ${VTK_LIBRARIES})
target_include_directories(Writers PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${VTK_LIBRARIES})

上述设置导致我出现错误,VTK 标头(包含在我的 writers.cpp 中)未找到

我的问题是

将 VTK 库(最新)添加到应用程序的标准程序是什么

c++ cmake vtk vtk-9.1.0
1个回答
0
投票

find_package(VTK REQUIRED)
表示使用Module模式添加依赖,在Module模式下需要手动包含VTK的头文件,并且必须手动设置环境变量。
示例:

# Search for the header
FIND_PATH(FOO_INCLUDE_DIR "foo/foo.h"
PATHS ${_foo_HEADER_SEARCH_DIRS} )

# Search for the library
FIND_LIBRARY(FOO_LIBRARY NAMES foo
PATHS ${_foo_LIB_SEARCH_DIRS} )
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FOO DEFAULT_MSG
FOO_LIBRARY FOO_INCLUDE_DIR)

完整示例请参阅FindXXX.cmake

如果想自动包含头文件,你应该使用Config模式:

find_package(VTK CONFIG REQUIRED)
,但必须编写脚本来安装库。
示例:

# Targets:
#   * <prefix>/lib/libfoo.a
#   * header location after install: <prefix>/include/foo/foo.h
#   * headers can be included by C++ code `#include <foo/foo.h>`
install(
    TARGETS foo
    EXPORT "${TARGETS_EXPORT_NAME}"
    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)

完整示例请参阅:安装

© www.soinside.com 2019 - 2024. All rights reserved.