I want to compile cpp
source code in which VTK
, Eigen
, PETSc
and dealII
libraries are included. source files are located in src
directory and header files in ìnclude
directory.
The CMakeLists.txt
file is as follows:
cmake_minimum_required(VERSION 3.20.3)
project(ddm_library)
set (CMAKE_CXX_FLAGS "-Wsign-compare -Wno-unused-variable -Wno-unused-parameter -Wdeprecated-copy")
set(VTK_DIR /home/mehdi/myFolder/programming/lib/VTK-9.0.3/build)
# PkgConfig
find_package(PkgConfig)
# PETSc
if (PKG_CONFIG_FOUND)
pkg_check_modules(PETSC PETSc)
endif()
# include PETSC
if (PETSC_FOUND)
list(APPEND COMPILE_OPTIONS ${PETSC_CFLAGS})
include_directories(${PETSC_INCLUDE_DIRS})
set(LINK_FLAGS "${LINK_FLAGS} ${PETSC_LDFLAGS}")
list(APPEND LIBRARIES ${PETSC_LINK_LIBRARIES})
set(CMAKE_REQUIRED_FLAGS ${PETSC_CFLAGS})
set(CMAKE_REQUIRED_INCLUDES "${PETSC_INCLUDE_DIRS}")
endif()
# include Eigen
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
# VTK library
find_package(VTK COMPONENTS
vtkCommonColor
vtkCommonCore
vtkCommonDataModel
vtkInteractionStyle
vtkRenderingContextOpenGL2
vtkRenderingCore
vtkRenderingFreeType
vtkRenderingGL2PSOpenGL2
vtkRenderingOpenGL2
vtkCommonCore
vtkCommonDataModel
vtkIOXML
QUIET
)
if (NOT VTK_FOUND)
message("Skipping StructuredGrid: ${VTK_NOT_FOUND_MESSAGE}")
return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
# dealII
FIND_PACKAGE(deal.II 9.3.0 QUIET
HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR}
)
IF(NOT ${deal.II_FOUND})
MESSAGE(FATAL_ERROR "\n"
"*** Could not locate a (sufficiently recent) version of deal.II. ***\n\n"
"You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n"
"or set an environment variable \"DEAL_II_DIR\" that contains this path."
)
ENDIF()
DEAL_II_INITIALIZE_CACHED_VARIABLES()
if (VTK_VERSION VERSION_LESS "8.90.0")
# old system
INCLUDE_DIRECTORIES(include ${VTK_USE_FILE} ${VTK_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR})
file (GLOB LIB "src/*.cc")
ADD_LIBRARY(lib ${LIB})
vtk_module_autoinit(
TARGETS lib
MODULES ${VTK_LIBRARIES}
)
DEAL_II_SETUP_TARGET(lib)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")
DEAL_II_SETUP_TARGET(${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE lib Eigen3::Eigen ${VTK_LIBRARIES})
else ()
# include all components
INCLUDE_DIRECTORIES(include ${VTK_USE_FILE} ${VTK_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR})
file (GLOB LIB "src/*.cc")
ADD_LIBRARY(lib ${LIB})
vtk_module_autoinit(
TARGETS lib
MODULES ${VTK_LIBRARIES}
)
DEAL_II_SETUP_TARGET(lib)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")
DEAL_II_SETUP_TARGET(${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE lib Eigen3::Eigen ${VTK_LIBRARIES})
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS ${PROJECT_NAME}
MODULES ${VTK_LIBRARIES}
)
endif ()
running cmd
like
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.7.3")
-- Checking for module 'PETSc'
-- Found PETSc, version 3.15.0
-- VTK_VERSION: 9.0.3
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mehdi/myFolder/programming/domain_decomposition/build
which finds all the packages. Then running the cmd
$ make
cc1plus: warning: /home/mehdi/myFolder/programming/lib/VTK-9.0.3/build/lib/cmake/vtk-9.0/vtk-use-file-deprecated.cmake: not a directory
In file included from /home/mehdi/myFolder/programming/domain_decomposition/src/post_processing.cc:2:
/home/mehdi/myFolder/programming/domain_decomposition/include/post_processing.hpp:14:10: fatal error: vtkActor.h: No such file or directory
14 | #include <vtkActor.h>
| ^~~~~~~~~~~~
I can not understand why I got such a error.