2017-05-31 30 views
2

私はFFTW 3.3.4を使用するC++コードを持っています。 Ubuntuの16.04、cmakeのバージョン3.7.2cmakeでFFTWライブラリを使用するには?

$ locate *fftw*.so 

/usr/lib/libsfftw.so 
/usr/lib/libsfftw_mpi.so 
/usr/lib/libsfftw_threads.so 
/usr/lib/libsrfftw.so 
/usr/lib/libsrfftw_mpi.so 
/usr/lib/libsrfftw_threads.so 
/usr/lib/x86_64-linux-gnu/libfftw3.so 
/usr/lib/x86_64-linux-gnu/libfftw3_mpi.so 
/usr/lib/x86_64-linux-gnu/libfftw3_omp.so 
/usr/lib/x86_64-linux-gnu/libfftw3_threads.so 
/usr/lib/x86_64-linux-gnu/libfftw3f.so 
/usr/lib/x86_64-linux-gnu/libfftw3f_mpi.so 
/usr/lib/x86_64-linux-gnu/libfftw3f_omp.so 
/usr/lib/x86_64-linux-gnu/libfftw3f_threads.so 
/usr/lib/x86_64-linux-gnu/libfftw3l.so 
/usr/lib/x86_64-linux-gnu/libfftw3l_mpi.so 
/usr/lib/x86_64-linux-gnu/libfftw3l_omp.so 
/usr/lib/x86_64-linux-gnu/libfftw3l_threads.so 
/usr/lib/x86_64-linux-gnu/libfftw3q.so 
/usr/lib/x86_64-linux-gnu/libfftw3q_omp.so 
/usr/lib/x86_64-linux-gnu/libfftw3q_threads.so 


$ locate fftw3.h 
/usr/include/fftw3.h 

私はこの方法でそれをコンパイルすることができます

g++ main.cpp -o main -lfftw3 

が、私はcmakeのに問題があります。

これは私のCMakeLists.txtです:

cmake_minimum_required(VERSION 3.5.1) 
project (main) 
SET(CMAKE_C_COMPILER gcc) 
SET(CMAKE_CXX_COMPILER g++) 
file(GLOB SOURCES "*.cpp") 
SET(CMAKE_CXX_FLAGS "-lm -lfftw3") 
SET(CMAKE_C_FLAGS "-lm -lfftw3") 
INCLUDE_DIRECTORIES(/usr/include) 
LINK_DIRECTORIES(/usr/lib/x86_64-linux-gnu) 
add_library(fftw3 STATIC IMPORTED) 
set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1) 
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1) 
add_executable(main ${SOURCES}) 

cmake . && make 

undefined reference to `fftw_malloc' 

およびその他のFFTW機能のための同じを提供します。

+2

[CMakeの "-l"(ell)コンパイラフラグを追加する方法](https://stackoverflow.com/questions/43136418/how-to-add-l)の可能な複製-ell-compiler-flag-in-cmake) – Tsyvarev

答えて

5

コマンドadd_libraryは、プロジェクト(CMake - add_library)にライブラリを作成します。私はそれがあなたが望むものではないと思います。

コマンド:g++ main.cpp -o main -lfftw3は、実行可能ファイルのfftwライブラリにリンクします。 CMakeのでは、との連携を再現することができます

add_executable(main ${SOURCES}) 
target_link_libraries(main fftw3) 

ドキュ:CMake - target_link_libraries
お知らせ:add_executableコマンドは、リンクの前に来ることが重要です。
FFTWで楽しんでください:)

+0

ありがとう、ありがとう。 – Maxim

+0

と同じことをすることができましたそれは、ありがとう、働く。 find_package(FFTW)で同じことを実行できましたか? – Maxim

+0

実際、cmakeにはFindFFTWモジュールがありません。 find_package(FFTW)を使うには、あなた自身でこれを書いたり、インターネット上で良いものを見つけなければなりません。私はそれをそのまま残す。 – Soeren

関連する問題