Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add VTK/9.0.1 - help needed! #3280

Closed
wants to merge 44 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6cd1ec1
First round
Oct 18, 2020
d5135a2
All files should be in place, with very raw adoption to conan-center …
Oct 18, 2020
fd99fd6
Fixes after applying conan-center hooks
Oct 19, 2020
156531b
First fixes in way to successful build
Oct 19, 2020
7c8d52c
First successful Win VS2019 Release local build, unfortunatelly with …
Oct 19, 2020
4211f48
Fixing test_package project
Oct 19, 2020
61ebafe
Fix HOOK errors
Oct 19, 2020
85609fa
Eliminating next HOOK errors. Status: Builds (with HOOK errors) succe…
Oct 19, 2020
14c305b
First fully successful Win Release build package and test!!!!
Oct 19, 2020
c098c80
Win local Debug build + test_package successful. No errors by HOOKs r…
Oct 19, 2020
36ba6ba
Polishing
Oct 20, 2020
9138937
Implement "cmake_find_package_multi" generator
Oct 20, 2020
18e1202
Fixing comments
Oct 20, 2020
636c5e0
Remove revision_mode = "scm" - make recipe more universal
Oct 20, 2020
799fa9a
Fix/Polish Mac
Oct 20, 2020
37ac2e3
Win and Mac should be fully functional with both "cmake" and "cmake_f…
Oct 20, 2020
9b14b7d
Dummy change to have signed commit
atrelinski Oct 20, 2020
6afdbef
Remove range in self.requires()
atrelinski Oct 20, 2020
1a13b9d
Update recipes/vtk/all/CMakeLists.txt
atrelinski Oct 20, 2020
00de05b
Polishing
Oct 20, 2020
643ea48
Fix version
Oct 22, 2020
ed108ac
Polishing
Oct 23, 2020
dfd1ed5
Try to adjust Lnx
Oct 23, 2020
02b7c02
Polishing
Oct 23, 2020
c5d946f
Wil Debug local successful
Oct 23, 2020
e375bc2
Polish
Oct 23, 2020
b3f1110
Polishing
Oct 24, 2020
a0dae91
Added VTK modules and groups
Oct 24, 2020
7943c19
Fix default for "Shared" option
Oct 24, 2020
a6982f1
Polish VTK defines
Oct 24, 2020
f8774a7
Removing Tk group - it does not exist in VTK 9.0.1
Oct 24, 2020
60a16f7
Add underscore to _groups and _modules
Oct 24, 2020
13eb35d
Fix list of modules for VTK 9.0.1
Oct 25, 2020
32a6117
Push to cci
Oct 25, 2020
917eb0e
Fixing Lnx trial
Oct 25, 2020
4530737
Boost for VTK verified (boost 1.74.0 fits VTK 9.0.1)
Oct 25, 2020
ac1fb92
Fix license
Oct 25, 2020
a8c36cc
Clean up recipe after successful Lnx build
Oct 25, 2020
facbe9a
Remove "apple-clang" < 10.0
Oct 26, 2020
bc26b6c
Clang 11 removed
Oct 26, 2020
e0f30b9
Remove test for "cmake_find_package_multi" generator
Oct 26, 2020
76e12b3
Eliminate shared apple-clang
Oct 26, 2020
18ec982
Try to fix Lnx
Oct 26, 2020
9bf7762
Remove MT builds (configurations) when vtk:shared=true is used
Oct 29, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions recipes/vtk/all/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(conanvtk)

include(conanbuildinfo.cmake)
conan_basic_setup()

include_directories(${CMAKE_SOURCE_DIR}/source_subfolder)
add_subdirectory("source_subfolder")
4 changes: 4 additions & 0 deletions recipes/vtk/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
sources:
"9.0.1":
sha256: 9229bf40d4d9a9e4d8a118149cff031b5199cd2cd20df6c41e5da7cd1c7ad23d
url: https://github.com/Kitware/VTK/archive/v9.0.1.tar.gz
369 changes: 369 additions & 0 deletions recipes/vtk/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,369 @@
import os
import re

from conans import ConanFile, CMake, tools
from conans.errors import ConanInvalidConfiguration


class VTKConan(ConanFile):
name = "vtk"
# version = "9.0.1" # DO NOT SUBMIT!!! Remove this line in final version of PR to conan-center-index
atrelinski marked this conversation as resolved.
Show resolved Hide resolved
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://vtk.org/"
license = "BSD-3-Clause"
description = "Visualization Toolkit by Kitware"
generators = "cmake"
settings = "os", "arch", "compiler", "build_type"
exports_sources = ["CMakeLists.txt", "patches/**"]
topics = ("conan", "VTK", "3D rendering", "2D plotting", "3D interaction", "3D manipulation",
"graphics", "image processing", "scientific visualization", "geometry modeling")
_groups = ["StandAlone", "Rendering", "MPI", "Qt", "Imaging", "Views", "Web"]
# _modules are taken from CMake GUI
_modules = [
"AcceleratorsVTKm"
"ChartsCore",
"CommonArchive"
"CommonColor"
"CommonComputationalGeometry",
"CommonCore",
"CommonDataModel",
"CommonExecutionModel",
"CommonMath"
"CommonMisc",
"CommonSystem",
"CommonTransforms",
"DICOMParser",
"DomainsChemistry",
"DomainsChemistryOpenGL2",
"DomainsMicroscopy",
"DomainsParallelChemistry",
"FiltersAMR",
"FiltersCore",
"FiltersExtraction",
"FiltersFlowPaths",
"FiltersGeneral",
"FiltersGeneric",
"FiltersGeometry",
"FiltersHybrid",
"FiltersHyperTree",
"FiltersImaging",
"FiltersModeling",
"FiltersOpenTURNS",
"FiltersParallel",
"FiltersParallelDIY2",
"FiltersParallelFlowPaths",
"FiltersParallelGeometry",
"FiltersParallelImaging",
"FiltersParallelMPI",
"FiltersParallelStatistics",
"FiltersParallelVerdict",
"FiltersPoints",
"FiltersProgrammable",
"FiltersReebGraph",
"FiltersSMP",
"FiltersSelection",
"FiltersSources",
"FiltersStatistics",
"FiltersTexture",
"FiltersTopology",
"FiltersVerdict",
"GeovisCore",
"GeovisGDAL",
"GUISupportMFC",
"GUISupportQt",
"GUISupportQtSQL",
"ImagingColor",
"ImagingCore",
"ImagingFourier",
"ImagingGeneral",
"ImagingHybrid",
"ImagingMath",
"ImagingMorphological",
"ImagingOpenGL2",
"ImagingSources",
"ImagingStatistics",
"ImagingStencil",
"InfovisBoost",
"InfovisBoostGraphAlgorithms",
"InfovisCore",
"InfovisLayout",
"InteractionImage",
"InteractionStyle",
"InteractionWidgets",
"IOADIOS2",
"IOAMR",
"IOAsynchronous",
"IOCityGML",
"IOCore",
"IOEnSight",
"IOExodus",
"IOExport",
"IOExportGL2PS",
"IOExportPDF",
"IOFFMPEG",
"IOGDAL",
"IOGeoJSON",
"IOGeometry",
"IOH5part",
"IOImage",
"IOImport",
"IOInfovis",
"IOLAS",
"IOLSDyna",
"IOLegacy",
"IOMINC",
"IOMPIImage",
"IOMotionFX",
"IOMovie",
"IOMySQL",
"IONetCDF",
"IOODBC",
"IOOggTheora",
"IOPDAL",
"IOPIO",
"IOPLY",
"IOParallel",
"IOParallelExodus",
"IOParallelLSDyna",
"IOParallelNetCDF",
"IOParallelXML",
"IOParallelXdmf3",
"IOPostgreSQL",
"IOSQL",
"IOSegY",
"IOTRUCHAS",
"IOTecplotTable",
"IOVPIC",
"IOVeraOut",
"IOVideo",
"IOXML",
"IOXMLParser",
"IOXdmf2",
"IOXdmf3",
"MomentInvariants",
"ParallelCore",
"ParallelDIY",
"ParallelMPI",
"PoissonReconstruction",
"Powercrust",
"PythonInterpreter",
"RenderingAnnotation",
"RenderingContext2D",
"RenderingContextOpenGL2",
"RenderingCore",
"RenderingExternal",
"RenderingFreeType",
"RenderingFreeTypeFontConfig",
"RenderingGL2PSOpenGL2",
"RenderingImage",
"RenderingLabel",
"RenderingLICOpenGL2",
"RenderingLOD",
"RenderingMatplotlib",
"RenderingOpenGL2",
"RenderingOpenVR",
"RenderingParallel",
"RenderingParallelLIC",
"RenderingQt",
"RenderingRayTracing",
"RenderingSceneGraph",
"RenderingUI",
"RenderingVolume",
"RenderingVolumeAMR",
"RenderingVolumeOpenGL2",
"RenderingVtkJS",
"SignedTensor",
"SplineDrivenImageSlicer",
"TestingCore",
"TestingGenericBridge",
"TestingIOSQL",
"TestingRendering",
"UtilitiesBenchmarks",
"ViewsContext2D",
"ViewsCore",
"ViewsInfovis",
"ViewsQt",
"WebCore",
"WebGLExporter",
"WrappingPythonCore",
"WrappingTools",

"diy2",
"doubleconversion",
"eigen",
"exodusII",
"expat",
"freetype",
"gl2ps",
"glew",
"h5part",
"hdf5",
"jpeg",
"jsoncpp",
"kissfft",
"kwiml",
"libharu",
"libproj",
"libxml2",
"loguru",
"lz4",
"lzma",
"metaio",
"netcdf",
"octree",
"ogg",
"opengl",
"pegtl",
"png",
"pugixml",
"sqlite",
"theora",
"tiff",
"utf8",
"verdict",
"vpic",
"vtkDICOM",
"vtkm",
"vtksys",
"xdmf2",
"xdmf3",
"zfp",
"zlib",
]
options = dict({"shared": [True, False], "fPIC": [True, False],
}, **{"group_{}".format(group.lower()): [True, False] for group in _groups},
**{"module_{}".format(module.lower()): [True, False] for module in _modules}
)
# default_options are set to the same values as clean VTK 9.0.1 cmake installation has, except "shared" which Conan require to be "False" by default.
default_options = dict({
"shared": False,
"fPIC": False,
}, **{"group_{}".format(group.lower()): True for group in _groups if (group in ["StandAlone", "Rendering"])},
**{"group_{}".format(group.lower()): False for group in _groups if (group not in ["StandAlone", "Rendering"])},
**{"module_{}".format(module.lower()): False for module in _modules})
short_paths = True
_source_subfolder = "source_subfolder"
_cmake = None


def config_options(self):
if self.settings.os == "Windows":
del self.options.fPIC

def configure(self):
compiler = str(self.settings.compiler)
if compiler == "apple-clang" and self.options.shared:
raise ConanInvalidConfiguration("VTK on apple-clang requires to be static (vtk:shared=False).")
if self.settings.compiler == "Visual Studio" and "MT" in self.settings.compiler.runtime and self.options.shared:
raise ConanInvalidConfiguration("VTK can not be built as shared library with MT runtime.")

def source(self):
tools.get(**self.conan_data["sources"][self.version])
extracted_dir = self.name.upper() + "-" + self.version
os.rename(extracted_dir, self._source_subfolder)

def requirements(self):
if self.options.group_rendering:
self.requires("opengl/system")
if self.options.module_ioxdmf3:
self.requires("boost/1.74.0")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
self.requires("boost/1.74.0")
self.requires("boost/1.75.0")

if self.options.group_qt:
# FIXME: Missing qt recipe. Qt recipe PR: https://github.com/conan-io/conan-center-index/pull/1759
# When qt available, "self.requires("qt/5.15.1")" should replace below line.
raise ConanInvalidConfiguration("qt is not (yet) available on conan-center-index")
Comment on lines +271 to +273
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was merged 🎉


def _configure_cmake(self):
if self._cmake:
return self._cmake
self._cmake = CMake(self)
self._cmake.definitions["BUILD_TESTING"] = "OFF"
self._cmake.definitions["BUILD_EXAMPLES"] = "OFF"
self._cmake.definitions["BUILD_SHARED_LIBS"] = "ON" if self.options.shared else "OFF"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conan handles the translation

Suggested change
self._cmake.definitions["BUILD_SHARED_LIBS"] = "ON" if self.options.shared else "OFF"
self._cmake.definitions["BUILD_SHARED_LIBS"] = self.options.shared

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see elsewhere it's very strict... is that the case here?


# VTK available options for cmake defines are `YES`, `WANT`, `DONT_WANT`, `NO`, or `DEFAULT`. Other values results as cmake configure step failure.
for group in self._groups:
self._cmake.definitions["VTK_GROUP_ENABLE_{}".format(group)] = "WANT" if self.options.get_safe("group_{}".format(group.lower()), default=False) else "DEFAULT"
for module in self._modules:
# Defines shouldn't be left uninitalized, however VTK has so many _modules, that
# it ends up as "The command line is too long." error on Windows.
if self.options.get_safe("module_{}".format(module.lower()), default=False):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if self.options.get_safe("module_{}".format(module.lower()), default=False):
# FIXME: remove top level if
if self.options.get_safe("module_{}".format(module.lower()), default=False):

self._cmake.definitions["VTK_MODULE_ENABLE_VTK_{}".format(module)] = "WANT" if self.options.get_safe("module_{}".format(module.lower()), default=False) else "DEFAULT"

self._cmake.configure(build_folder='build')
return self._cmake

def build(self):
if self.options.group_qt:
if self.options["qt"].shared == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:shared=True'")
if self.settings.os == "Linux":
if self.options["qt"].qtx11extras == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:qtx11extras=True'")
Comment on lines +295 to +301
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def build(self):
if self.options.group_qt:
if self.options["qt"].shared == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:shared=True'")
if self.settings.os == "Linux":
if self.options["qt"].qtx11extras == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:qtx11extras=True'")
def validate(self):
if self.options.group_qt:
if self.options["qt"].shared == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:shared=True'")
if self.settings.os == "Linux":
if self.options["qt"].qtx11extras == False:
raise ConanInvalidConfiguration("VTK option 'group_qt' requires 'qt:qtx11extras=True'")
def build(self):


for patch in self.conan_data.get("patches", {}).get(self.version, []):
atrelinski marked this conversation as resolved.
Show resolved Hide resolved
tools.patch(**patch)

cmake = self._configure_cmake()
cmake.build()

def package(self):
cmake = self._configure_cmake()
cmake.install()

# "$\package\lib\vtk" contains "hierarchy\conanvtk\" and a lot of *.txt files in it. I believe they are not needed. Remove them.
tools.rmdir(os.path.join(self.package_folder, 'lib', 'vtk'))
# "$\package\lib\cmake" contains a lot of *.cmake files. conan-center HOOK disallow *.cmake files in package. Remove them.
tools.rmdir(os.path.join(self.package_folder, 'lib', 'cmake'))
# Licenses are created in "$\package\share\licenses\conanvtk\" while their must be in "$\package\licenses\". Move them from former to latter.
os.rename(os.path.join(self.package_folder, 'share', 'licenses', 'conanvtk'), os.path.join(self.package_folder, 'licenses'))
tools.rmdir(os.path.join(self.package_folder, 'share'))

# GCC static linking require providing libraries in appropriate order.
# Below "order" is not necessary correct (couldn't find the correct one), but after few trials, it worked for one configuration.
def _sort_libs(self, libs):
if self.settings.compiler != "gcc":
return libs
libs_ordered = []
print('VTK libs before sort: ' + (';'.join(libs)))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a self.output.info for the conan-ization of print

order = ['vtkViewsCore', 'vtkViewsContext2D', 'vtkRenderingVolumeOpenGL2', 'vtkRenderingContextOpenGL2', 'vtkRenderingContext2D', 'vtkRenderingVolume', 'vtkfreetype', 'vtkRenderingFreeType', 'vtkRenderingAnnotation', 'vtkInteractionWidgets', 'vtkInteractionStyle', 'vtkImagingMath', 'vtkImagingHybrid', 'vtkImagingGeneral', 'vtkImagingColor', 'vtkexpat', 'vtkIOXMLParser', 'vtkIOXML', 'vtkIOLegacy', 'vtkIOGeometry', 'vtkgl2ps', 'vtkglew', 'vtkRenderingOpenGL2', 'vtkRenderingGL2PSOpenGL2', 'vtktiff', 'vtkpng', 'vtkjpeg', 'vtkmetaio', 'vtkIOImage', 'vtkIOExport', 'vtkzlib', 'vtkIOCore', 'vtkFiltersModeling', 'vtkFiltersSources', 'vtkRenderingCore', 'vtkImagingSources', 'vtkFiltersHybrid', 'vtkFiltersGeometry', 'vtkalglib', 'vtkImagingCore', 'vtkImagingFourier', 'vtkFiltersStatistics', 'vtkFiltersGeneral', 'vtkFiltersExtraction', 'vtkFiltersCore', 'vtkDICOMParser', 'vtkCommonExecutionModel', 'vtkCommonComputationalGeometry', 'vtkCommonDataModel', 'vtkCommonSystem', 'vtkCommonTransforms', 'vtkCommonMath', 'vtkCommonMisc', 'vtkCommonCore', 'vtkloguru', 'vtkCommonColor', 'vtksys']
for item in order:
for idx in range(len(libs)):
if item.lower() in libs[idx].lower():
value = libs.pop(idx)
libs_ordered.append(value)
break
libs_ordered = libs + libs_ordered # add unordered elements, if any
print('VTK libs ordered: ' + (';'.join(libs_ordered)))
return libs_ordered

def package_info(self):
self.cpp_info.names["cmake_find_package"] = "VTK"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you check what cmake modules vtk installs and recreate them using components?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@madebr
Not sure what are You taking about.
Do You mean more or less what was done in Added VTK modules and groups commit?

Copy link
Contributor

@madebr madebr Oct 24, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the package method, at the line

tools.rmdir(os.path.join(self.package_folder, 'lib', 'cmake'))

you remove the cmake config scripts.
The hooks indeed do block XXX-config.cmake and FindXXX.cmake scripts.
But when a consumers needs VTK in his cmake script, he still want to do something like the following:

find_package(VTK CONFIG REQUIRED COMPONENTS Opt1 OPT2)
target_link_library(my_exe PRIVATE VTK::Opt1 VTK::Opt2)

Conan components allow to define these cmake imported targets (to a certain extent).

self.cpp_info.names["cmake_find_package_multi"] = "VTK"
libs = tools.collect_libs(self)
self.cpp_info.libs = self._sort_libs(libs)

# Adding system libs without 'lib' prefix and '.so' or '.so.X' suffix.
if self.settings.os == 'Linux':
self.cpp_info.system_libs.append('pthread')
self.cpp_info.system_libs.append('dl') # 'libvtksys-7.1.a' require 'dlclose', 'dlopen', 'dlsym' and 'dlerror' which on CentOS are in 'dl' library

if not self.options.shared and self.options.group_qt:
if self.settings.os == 'Windows':
self.cpp_info.system_libs.append('Ws2_32') # 'vtksys-9.0d.lib' require 'gethostbyname', 'gethostname', 'WSAStartup' and 'WSACleanup' which are in 'Ws2_32.lib' library
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
self.cpp_info.system_libs.append('Ws2_32') # 'vtksys-9.0d.lib' require 'gethostbyname', 'gethostname', 'WSAStartup' and 'WSACleanup' which are in 'Ws2_32.lib' library
self.cpp_info.system_libs.append('ws2_32') # 'vtksys-9.0d.lib' require 'gethostbyname', 'gethostname', 'WSAStartup' and 'WSACleanup' which are in 'Ws2_32.lib' library

self.cpp_info.system_libs.append('Psapi') # 'vtksys-9.0d.lib' require 'GetProcessMemoryInfo' which is in 'Psapi.lib' library
self.cpp_info.system_libs.append('dbghelp') # 'vtksys-9.0d.lib' require '__imp_SymGetLineFromAddr64', '__imp_SymInitialize' and '__imp_SymFromAddr' which are in 'dbghelp.lib' library

if self.settings.os == 'Macos':
self.cpp_info.frameworks.extend(["CoreFoundation"]) # 'libvtkRenderingOpenGL2-9.0.a' require '_CFRelease', '_CFRetain', '_objc_msgSend' and much more which are in 'CoreFoundation' library
self.cpp_info.frameworks.extend(["Cocoa"]) # 'libvtkRenderingOpenGL2-9.0.a' require '_CGWarpMouseCursorPosition' and more, 'libvtkRenderingUI-9.0.a' require '_OBJC_CLASS_$_NSApplication' and more, which are in 'Cocoa' library

version_split = self.version.split('.')
short_version = "{}.{}".format(version_split[0], version_split[1])
Comment on lines +360 to +361
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
version_split = self.version.split('.')
short_version = "{}.{}".format(version_split[0], version_split[1])
version = tools.Version(self.version)
short_version = "{}.{}".format(version.major, version.minor)

# Why "vtknetcdf" and "vtknetcdfcpp" are treated exceptionally from all other _modules?
# There are a lot of other *.h in subfolders, should they be directly exposed too
# or maybe those two should be removed from below?
Comment on lines +362 to +364
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this how the CMake targets are exposed? Maybe put a link?

self.cpp_info.includedirs.extend([
os.path.join("include", "vtk-{}").format(short_version),
os.path.join("include", "vtk-{}", "vtknetcdf", "include").format(short_version),
os.path.join("include", "vtk-{}", "vtknetcdfcpp").format(short_version)
])
11 changes: 11 additions & 0 deletions recipes/vtk/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.1.3) # 3.1.3 is first fully functional cross-platform version with Targets
project(test_vtk_package)

set(CMAKE_CXX_STANDARD 11)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

add_executable(${PROJECT_NAME} test_package.cpp)
target_link_libraries(${PROJECT_NAME} CONAN_PKG::vtk)

Loading