我终于设法弄清楚了这一点。我不保证我以最好的方式做到了这一点,因为我不是Visual Studio专家,但它确实有效。所以为了后人的利益,这就是我所做的。
首先,复制config.h.in。调用新的副本config.h。现在手动编辑它来为要生成的库设置选项:它应该使用哪种精度模式,要编译哪个向量指令集(如果有的话),各种类型的大小(这取决于您是否计划以32位或64位模式编译),是否包含线程支持等。
现在创建一个空的VS项目。我建议将它放在源文件夹的顶层。然后在解决方案资源管理器中,单击顶部的“显示所有文件”图标。这将使以下步骤更容易,因为您可以直接从解决方案资源管理器添加或排除文件。
调出项目属性窗口。有很多选项需要设置:
通常,将“配置类型”设置为静态库。 (或者你可以将它设置为动态库,如果你需要一个DLL,但是你需要弄清楚如何让它导出必要的符号。我没有那样做,因为我想要一个静态库。)
在VC++目录中,编辑“包含目录”。
(source dir)
(source dir)\api
(source dir)\dft
(source dir)\rdft
(source dir)\reodft
(source dir)\kernel
(source dir)\simd-support
(source dir)\dft\simd
(source dir)\dft\scalar
(source dir)\rdft\simd
(source dir)\rdft\scalar
如果你包括线程支持,然后在C/C++>语言,设置“打开MP支持”:(由包含源的实际目录替换“(源代码目录)”)将以下目录添加是的。
如果你包括AVX支持,那么在C/C++>代码生成,设置了“启用增强指令集”到AVX。这意味着您生成的库不适用于任何不支持AVX的计算机。您只需在使用AVX的各个源文件上设置此选项即可解决此限制。对此我不确定。
在C/C++>输出文件中,设置 “对象文件名” 到$(IntDir)/%(RelativeDir)/
。 (FFTW有很多文件名称相同,但目录不同,默认情况下VS将所有目标文件放在同一个目录中,这将不起作用。)
现在您已准备好将源文件添加到该项目可以通过右键单击解决方案资源管理器并选择“包含在项目中”来完成。您应该添加的所有.c文件在以下文件夹:
api
dft
dft/scalar
kernel
rdft
rdft/scalar
reodft
如果你想线程支持,你应该加入“线程” 除了为threads.c所有的源文件。 (那个包含pthreads版本。)
如果您想为任何向量指令集的支持,你应该只包括与该特定指令的文件集,而从下列文件夹想:
dft/simd
rdft/simd
simd-support
据推测,如果你想MPI支持,包括“mpi”中的文件。我没有那样做,所以我不知道是否还有其他工作需要完成。
一定要将配置设置为“发布”和“x86”或“x64”,具体取决于您想要的二进制类型。
现在,如果我没有忘记任何关键的东西,你应该可以编译一个库。
感谢您花时间概述您的解决方案。我也被困在与VS 2015的兼容性上,它似乎不是一个流行的问题。 – benrules2