在 CMake 项目中包含 libsimdpp

Including libsimdpp in a CMake project

我决定使用 libsimdpp 对我的 C++ 代码进行矢量化。问题是,几乎没有关于如何开始的文档。

Í 假定包含很简单,因为它也像我正在做的项目一样基于 CMake,所以我只是尝试复制目录并设置包含路径。好吧,事实证明这还不够:您需要定义适当的标志来指定要针对哪种 SIMD 风格进行编译。 libsimdpp 包含一个 CMake 宏,它可以创造奇迹。但是我不确定如何从这里开始,感觉就像我在反对 CMake 而不是通过复制和删除东西来使用它。

有没有对 CMake 有深入了解的人一步一步地解释一下该做什么?谢谢!

您应该检查编译 libsimdpp 测试的 simdpp/test/CMakeLists.txt 文件。相关部分如下:

foreach(SRC ${TEST1_ARCH_SOURCES})
    simdpp_multiarch(TEST1_ARCH_GEN_SOURCES ${SRC} ${COMPILABLE_ARCHS})
endforeach()

add_executable(test1 EXCLUDE_FROM_ALL
    ${TEST1_SOURCES}
    ${TEST1_ARCH_GEN_SOURCES}
)

基本上,TEST1_ARCH_SOURCES 包含使用 libsimdpp 的代码。 simdpp_multiarch 复制源代码并为它们设置适当的编译标志,以便实现例如SSE2 和 AVX2 可以链接到同一个可执行文件中。然后将这些生成的源 (TEST1_ARCH_GEN_SOURCES) 添加到可执行文件中。