Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake ld:找不到-lnetcdf的库_Cmake_Gfortran_Netcdf - Fatal编程技术网

Cmake ld:找不到-lnetcdf的库

Cmake ld:找不到-lnetcdf的库,cmake,gfortran,netcdf,Cmake,Gfortran,Netcdf,我是新来的。我无法解决流动错误。有人能帮我吗 ------------错误-------------- PROGRAM unpack_array IMPLICIT NONE INCLUDE 'netcdf.inc' INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307) ...... -------------------CMake文件------------------ PROGRAM unpack_array IMP

我是新来的。我无法解决流动错误。有人能帮我吗

------------错误--------------

PROGRAM unpack_array

  IMPLICIT NONE
  INCLUDE 'netcdf.inc'

  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......
-------------------CMake文件------------------

PROGRAM unpack_array

  IMPLICIT NONE
  INCLUDE 'netcdf.inc'

  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......
--------------解包f90-------------------

PROGRAM unpack_array

  IMPLICIT NONE
  INCLUDE 'netcdf.inc'

  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......

我用的是MACOS Catalina。Apple clang 11.0.3版(clang-1103.0.32.59)
目标:x86_64-apple-darwin19.4.0

如果使用
find_package()
在计算机上查找NetCDF,则不需要手动指定路径。让
find_package
为您做这件事

注意:CMake不附带for NetCDF,因此您必须从internet下载一个(如)。然后,您需要使用
CMake模块路径告诉CMake在系统上查找此
FindNetCDF.CMake
文件的位置。最后,您可以使用导入的目标将NetCDF链接到项目的目标

cmake_minimum_required(VERSION 3.10.0)
project(NUP Fortran)
# Don't need this, you already enabled Fortran above in the 'project' call.
enable_language(Fortran)

set(INCLUDE_FILE /usr/local/Cellar/netcdf/4.7.4/include)
set(lib_FILE /usr/local/Cellar/netcdf/4.7.4/lib)

# Add the location of the 'FindNetCDF.cmake' file to your module path.
list(APPEND CMAKE_MODULE_PATH "/path/to/downloaded/find/module")
# Then, call find package for NetCDF. 
find_package(NetCDF REQUIRED)

if(${NetCDF_FOUND})
    # Don't need this if you use the imported target below.
    include_directories(${INCLUDE_FILE})

    # Don't provide directories with source file list.
    set(SOURCE_FILES
        ${PROJECT_BINARY_DIR} 
        unpack.f90
    )

    add_executable(NUP ${SOURCE_FILES})

    # Use the imported target to link netcdf instead.
    target_link_libraries(NUP PRIVATE NetCDF::NetCDF)
endif()
cmake_最低要求(3.10.0版)
项目(NUP Fortran)
#不需要这个,您已经在上面的“项目”调用中启用了Fortran。
启用_语言(Fortran)
设置(包括文件/usr/local/ceral/netcdf/4.7.4/INCLUDE)
set(lib_文件/usr/local/ceral/netcdf/4.7.4/lib)
#将“FindNetCDF.cmake”文件的位置添加到模块路径中。
列表(将CMAKE_模块_路径“/路径/添加到/下载/查找/模块”)
#然后,调用NetCDF的find包。
查找包(需要NetCDF)
if(${NetCDF_FOUND})
#如果使用下面导入的目标,则不需要此选项。
包含目录(${include\u FILE})
#不提供包含源文件列表的目录。
设置(源文件)
${PROJECT\u BINARY\u DIR}
解包f90
)
添加可执行文件(NUP${SOURCE\u FILES})
#使用导入的目标链接netcdf。
目标链接库(NUP专用NetCDF::NetCDF)
endif()
如前所述,有其他方法可以将NetCDF添加到CMake项目中。如果使用不同的查找模块,则提供的NetCDF CMake变量和导入目标的语法可能略有不同。您必须检查find模块文件本身

此外,您可以使用从internet下载的CMake包配置文件(例如
netCDFConfig.CMake
)将NetCDF添加到项目中。在这种情况下,您仍将使用
find_package()
,但您将使用
CMAKE_PREFIX_PATH
而不是
CMAKE_MODULE_PATH
指定配置文件的位置


您可以在CMake文档中找到这些方法的详细描述。我强烈建议您花些时间阅读。

由于问题中的代码没有
CMAKE_MODULE_PATH
设置,因此asker更可能使用“Config”文件来查找包,而不是“find”文件。声明
netCDF::netCDF
为导入目标。非常感谢您的帮助!你们两个。我只是根据你的建议修改了代码。但我遇到了另一个错误,我无法解决:架构x86_64的未定义符号:“nf_close”,引用自unpack.f90中的:MAIN_u。o@Tsyvarev谢谢,我现在知道CMake没有提供开箱即用的“查找”模块。@mengjiewarmuth我只是找时间更新我的回复。我提供了将NetCDF添加到项目中的更多细节。希望这有帮助!