大家好,感谢您的帮助,
我是 CMAKE 的新手,我尝试为 C 和 Fortran NETCDF 库编写一个查找库。问题是 fortran 和 C netcdf 的位置和版本可能不同。
对于 fortran 库,我搜索 netcdf.mod(包含模块)和 libnetcdff.so(动态库),而对于 C 库,我搜索 netcdf.h 和 libnetcdf.so。
在网上我找到了一个神奇的代码,可以正确找到 netcdf C 库:
find_path (NETCDF_INCLUDES_C netcdf.h HINTS NETCDF_DIR NETCDF_DIR)
message(" inc = ${NETCDF_INCLUDES_C} ")
find_library (NETCDF_LIBRARIES_C NAMES netcdf)
message(" lib = ${NETCDF_LIBRARIES_C} ")
两条路径都是正确的。我尝试回复fortran的代码:
find_path (NETCDFF_INCLUDES_F90 netcdff.mod HINTS NETCDFF_DIR NETCDFF_DIR)
message(" inc ff = ${NETCDFF_INCLUDES_F90} ")
find_library (NETCDFF_LIBRARIES_F90 NAMES netcdff HINTS NETCDFF_DIR )
message(" lib ff= ${NETCDFF_LIBRARIES_F90} ")
mark_as_advanced(NETCDF_LIBRARIES_F90)
但是两个F90路径都是空的,可能是因为我不明白cmake如何找到C库。通过 MODULE ENVIRONMENT 我加载库并加载该环境变量的模块:
$NETCDFF_HOME $NETCDFF_INC $NETCDFF_INCLUDE $NETCDFF_LIB
$NETCDF_HOME $NETCDF_INC $NETCDF_INCLUDE $NETCDF_LIB
我错误地认为 CMAKE 搜索 NETCDF_DIR 变量并进入此搜索 netcdf.h,但在我的 CmakeList 和 ENV 中该变量未定义。
CMake 如何找到 C var?以及如何将找到的结果回复到 fortran lib?
谢谢你帮助我
致以诚挚的问候
埃里克
最佳答案
也许我的答案本身并不是一个答案,但是你不能使用VTK附带的FindNetCDF.cmake吗?
https://github.com/Kitware/VTK/blob/master/CMake/FindNetCDF.cmake
或者其他用户提供的与前一个类似的(他们可以查找 Fortran 和 C 组件)?
https://github.com/bilke/cmake-modules/blob/master/FindNetCDF.cmake
https://github.com/jedbrown/cmake-modules/blob/master/FindNetCDF.cmake
如果您包含此文件,那么您可以通过以下方式检索所需的组件:
set (NETCDF_F90 "YES")
find_package (NetCDF REQUIRED)
include_directories(${NETCDF_INCLUDES})
target_link_libraries (uses_f90_interface ${NETCDF_LIBRARIES})
target_link_libraries (only_uses_c_interface ${NETCDF_LIBRARIES_C})
或者对于 VTK 版本,类似
find_package (NetCDF COMPONENTS F90)
include_directories(NETCDF_F90_INCLUDE_DIRS)
target_link_libraries (only_uses_f90_interface ${NETCDF_F90_LIBRARIES})
正如 VTK 版本所述,您可以通过以下方式传递 C 和 Fortran 库的不同搜索目录:
When interfaces are requested the user has access to interface specific hints:
NETCDF_${LANG}_INCLUDE_DIR - where to search for interface header files
NETCDF_${LANG}_LIBRARY - where to search for interface libraries
关于c - 为 C 和 Fortran 库编写 CMake Find Netcdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571163/