【发布时间】:2025-12-13 08:45:01
【问题描述】:
大家好,感谢您的帮助,
我是 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 我加载库和模块加载 env var:
$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?
谢谢你的帮助
最好的问候
埃里克
【问题讨论】:
-
您是真的想
netcdff.mod还是想要netcdf.mod?另外我真的不知道cmake,但如果看起来你可能试图存储在NETCDFF_INCLUDES_F90,但你的消息使用${NETCDF_INCLUDES_F90}(即第一个有一个额外的F) -
感谢您的回复,在复制和粘贴中出现了一些错误。正确的包含模块文件是 netcdf.mod 并且消息在 NETCDFF_INCLUDES_F90 上,我更正了我之前的帖子。
-
您运行的是哪个版本的 CMake?
-
我想你忘记更正模块文件名了。
-
CMAKE版本为3.5.2,模块正确名称为netcdf.mod。
标签: c cmake fortran shared-libraries netcdf