правильный способ написать CMakeLists ссылки на HDF5 в Windows - PullRequest
0 голосов
/ 03 февраля 2019

Я уже скачал встроенный HDF5 под Windows, используя CMake, я также сгенерировал установщик для установки его в Program Files.

Ниже CMakeLists.txt, который я написал, чтобы иметь возможность использовать HDF5 в программеЯ уже писал под Linux:

cmake_minimum_required(VERSION 2.8)

project(Hdf5DataFeed)

add_definitions(-DWINDOWS)

find_package(HDF5)
FIND_LIBRARY(HDF5_HL_LIBRARY hdf5_hl)
FIND_LIBRARY(ZLIB zlib)
find_library(ZMQ_LIB zmq)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

include_directories(${ZMQ_LIB_INCLUDE})

aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

target_link_libraries(${PROJECT_NAME} ${ZLIB} "C:/Program Files/HDF_Group/HDF5/1.10.1/lib/libszip.lib"  ${VTK_LIBRARIES} ${ZMQ_LIB} ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARY} Qt5::Core Qt5::Gui Qt5::Widgets)

target_include_directories(${PROJECT_NAME} PRIVATE ${HDF5_INCLUDE_DIRS})

Как вы можете видеть выше, чтобы связать HDF5 в Visual Studio, мне понадобился Zlib, Szip (чтобы мне пришлось вводить абсолютный путь к нему, мне не нравитсяthat), библиотека HDF5 и библиотека HDF5 High Level (Lite).

Эти библиотеки расположены в папке C: \ Program Files \ HDF_Group \ HDF5 \ 1.10.1 \ lib:

libhdf5.lib <============
libhdf5.settings
libhdf5_cpp.lib
libhdf5_hl.lib <=====
libhdf5_hl_cpp.lib
libhdf5_tools.lib
libszip.lib <=== ????
libzlib.lib <====

Я использую CMake-Gui для информирования CMake о пути к библиотекам (за исключением Szip, я не знаю, почему CMake не знает об этом и почему у меня нет возможности просто кормить CMake каталогом библиотеки вместоуказывая путь нескольких из них).

Я хочу использовать CMake-GUI для информирования CMake о пути к библиотеке Szip, но этот последний не создает запись о нем, у меня есть только эти записи, связанные с HDF5:

HDF5 CMake entries

У меня проблемы с HDF5 также в Ubuntu (см. Этот вопрос: hdf5.h нет такого файла или каталога в Ubuntu и CMake ).

Пока что только в CentOS 7 я не столкнулся с какими-либо проблемами с HDF5.

Если кто-то может дать мне / нам окончательное решение, которое работает как на Windows, так и на Ubuntu, это было бы здорово!

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Для libszip лучше добавить find_library, чем поместить на нее абсолютную ссылку.Для ZLib предпочтительно использовать find_library, так как find_package потребует от вас заполнить CMake каталогом include, который не требуется для HDF5.Наконец, предпочтительно использовать find_package для ZMQ, в противном случае нам нужно вручную добавить запись "ZMQ_LIB_INCLUDE".

0 голосов
/ 11 февраля 2019

Работает ли у вас это решение?

cmake_minimum_required(VERSION 2.8)
project(Hdf5DataFeed)

# necessary?
add_definitions(-DWINDOWS)

find_package(HDF5 REQUIRED COMPONENTS C CXX HL)
find_package(ZLIB REQUIRED)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
find_library(ZMQ_LIB zmq)

include_directories(${ZMQ_LIB_INCLUDE} ${HDF5_INCLUDE_DIR} 
  ${ZLIB_INCLUDE_DIRS})

aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

target_link_libraries(${PROJECT_NAME} ${HDF5_LIBRARIES}
  ${HDF5_HL_LIBRARIES} ${ZLIB_LIBRARIES} ${VTK_LIBRARIES} 
  Qt5::Core Qt5::Gui Qt5::Widgets ${ZMQ_LIB})

Рекомендация 1: Конечно, есть способ найти Qt5 через find_package, то есть

find_package(Qt5 COMPONENTS Core Widgets REQUIRED)

и затем добавьте правильные переменные в include_directories и target_link_libraries.Не уверен, существует ли такая возможность для библиотеки zmq.

Рекомендация 2: Я думаю, что вызова aux_source_directory следует избегать в большинстве случаев.Вместо этого создайте явный список ваших исходных файлов.

...