2017-05-31 348 views
2

我有使用FFTW 3.3.4的C++代碼。 Ubuntu的16.04,cmake的版本3.7.2如何在cmake中使用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) 

的Docu:CMake - target_link_libraries
注意:這是非常重要的add_executable命令鏈接之前。
與FFTW玩得開心:)

+0

它的工作原理,謝謝。是否可以這樣做 – Maxim

+0

它的工作原理,謝謝。是否可以用find_package(FFTW)做同樣的事情? – Maxim

+0

實際上cmake中沒有FindFFTW模塊。要使用find_package(FFTW),你應該自己寫或在互聯網上找一個好的。我會保持原樣。 – Soeren