CMakelists.txt 用于编译 HDF5?

Posted

技术标签:

【中文标题】CMakelists.txt 用于编译 HDF5?【英文标题】:CMakelists.txt for compiling HDF5? 【发布时间】:2017-05-22 15:17:35 【问题描述】:

我正在尝试编译一个简单的程序来读取 HDF5 文件。该代码使用 h5c++ 正确编译。但是我需要一个 cmakelists.txt 来做同样的事情

readdata.cpp

#include <iostream>
#include "H5Cpp.h"
#ifndef H5_NO_NAMESPACE
    using namespace H5;
#endif
const H5std_string FILE_NAME( "testfile.h5" );

int main (void)

    H5File openFile( FILE_NAME, H5F_ACC_RDONLY );

我为它尝试了一个 cmakelists,但它没有用。它给出了“未定义的错误”

readdata.cpp:(.text+0x1d): undefined reference to `H5::FileAccPropList::DEFAULT'
readdata.cpp:(.text+0x24): undefined reference to `H5::FileCreatPropList::DEFAULT'
readdata.cpp:(.text+0x38): undefined reference to `H5check_version'
readdata.cpp:(.text+0x54): undefined reference to `H5::H5File::H5File(std::__cxx11::basic_string<char,     std::char_traits<char>, std::allocator<char> > const&, unsigned int, H5::FileCreatPropList const&, H5::FileAccPropList const&)'
readdata.cpp:(.text+0x60): undefined reference to `H5::H5File::~H5File()'

CMakelists.txt

cmake_minimum_required(VERSION 3.1.0) 
PROJECT (readhdf5)

find_package(HDF5 REQUIRED)
include_directories($HDF5_INCLUDE_DIRS)

add_executable( readdata readdata.cpp )

target_link_libraries( readdata $HDF5_CXX_LIBRARIES $HDF5_LIBRARIES)

如果我手动放置 HDF5_CXX_LIBRARIES 和 HDF5_LIBRARIES,它可以工作。

target_link_libraries( readdata libhdf5.so libhdf5_cpp.so)

所以它无法读取 $HDF5_CXX_LIBRARIES 和 $HDF5_LIBRARIES。我该如何解决这个问题?

【问题讨论】:

首选target_include_directories 【参考方案1】:

您尝试编译的代码取决于 HDF5 C++ 绑定,默认情况下 CMake 的 HDF5 模块不会搜索这些绑定。显式添加绑定到find_package 命令:

find_package(HDF5 REQUIRED COMPONENTS C CXX)

【讨论】:

以上是关于CMakelists.txt 用于编译 HDF5?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 cmakelists.txt 编译使用在其他地方声明和实现的函数和类的 cpp

直接传递编译选项(绕过 CMakeLists.txt)

将编译器命令行转换为 Casablanca Rest SDK 的 CMakeLists.txt

ROS中的CMakeLists.txt

如何不使用命令行参数编译 CMakeLists.txt 的一部分?

cmake 多级CMakeLists.txt调用