我有一个使用FFTW 3.3.4的C++代码。Ubuntu 16.04,cmake版本3.7.2
$ 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条答案
按热度按时间wh6knrhe1#
命令
add_library
将在项目(CMake - add_library)中创建一个库。我想这不是你想要的。命令:
g++ main.cpp -o main -lfftw3
将可执行文件链接到fftw库。在CMake中,您可以使用以下命令复制链接:文档:CMake - target_link_libraries
注意:add_executable命令在链接之前是很重要。
玩得开心FFTW:)
5tmbdcev2#
我们将此任务委托给
pkg-config
:这适用于cmake 3.11(至少,它可能也适用于早期版本)。
**注意:**这不适用于
fftw3_thread
组件,因为它们没有单独的.pc
文件。(参见https://github.com/FFTW/fftw3/issues/180)。这 * 可能 * 工作添加组件(未经测试,不工作在Mac电脑-见注解-):
注2:我在这里粘贴@OlafWilkocx解决方案,以获得线程组件以及
注3
有人告诉我
include_directories(PkgConfig::FFTW)
这行总是不正确的,建议只使用link_libraries(PkgConfig::FFTW)
或target_link_libraries(target_name PRIVATE PkgConfig::FFTW)
。标签:Avoid bad include paths in CMake's pkg-config fallback