如何在 cmake 文件中正确定义对 FFTW 的依赖?

问题描述 投票:0回答:0

我想在我的 C++ 程序中使用 fftw。 为此,我在

--download-fftw
选项旁边安装了 petsc,因为我将来也想使用 Petsc。我只是下载了最新的稳定版本,使用相应的选项运行
./configure
然后
make
->
sudo make install

文件现在位于

/usr/local/petsc
,其中包含以下fftw文件:

$ ls /usr/local/petsc/include/
...
fftw3-mpi.f03
fftw3-mpi.h
fftw3.f
fftw3.f03
fftw3.h
fftw3l-mpi.f03
fftw3l.f03
fftw3q.f03
... 

$ ls /usr/local/petsc/lib/
...
libfftw3.a
libfftw3.la
libfftw3.so
libfftw3.so.3
libfftw3.so.3.6.10
libfftw3_mpi.a
libfftw3_mpi.la
libfftw3_mpi.so
libfftw3_mpi.so.3
libfftw3_mpi.so.3.6.10
...

然后我为我的项目定义我的

CMakeLists.txt
文件如下:

cmake_minimum_required(VERSION 3.0)
find_package(MPI REQUIRED)
add_executable(my_program my_program.cpp)

set(PETSC_DIR "/usr/local/petsc")
target_include_directories(my_program PUBLIC 
                           ${MPI_INCLUDE_PATH} 
                           ${PETSC_DIR}/include)
target_link_libraries(my_program PUBLIC 
                      ${MPI_LIBRARIES} 
                      ${PETSC_DIR}/lib)

my_program
中,我简单地调用
fftw_mpi_init()

#include <mpi.h>
#include <fftw3-mpi.h>
int main(){
  MPI_Init(NULL, NULL);
  fftw_mpi_init();
}

但是,此设置返回错误消息

undefined reference to `fftw_mpi_init'

我意识到

fftw_mpi_init
没有在我的
/usr/local/petsc
目录中的任何地方定义:

这是否与我的 C++ 程序无法找到 fftw 函数有关?如果我想使用与 petsc 一起下载的 fftw 安装,我需要采取哪些步骤?

编辑:我也尝试添加行

find_package(PkgConfig REQUIRED)
pkg_search_module(FFTW REQUIRED fftw3 IMPORTED_TARGET)
include_directories(PkgConfig::FFTW)
link_libraries     (PkgConfig::FFTW)

按照

here
的建议添加到我的CMakeLists.txt文件,但我仍然遇到相同的错误
undefined reference to fftw_mpi_init'
.

c++ cmake makefile fftw petsc
© www.soinside.com 2019 - 2024. All rights reserved.