应如何使用现代 CMake 添加 SSE 标志?

joh*_*003 5 c++ cmake

我尝试至少遵循现代 cmake >= 3.0 的准则,其中我不假设有关编译器的任何内容并使用基于目标的命令。

请参阅:https ://www.youtube.com/watch? v=bsXLMQ6WgIk 或搜索“ effective cmake”。

那么,当我的目标依赖于 SSE 4.1 时,我应该如何声明这些信息呢?

我实际上期望 FindSSE 包含一个没有源的接口目标,但带有它自己的适当的链接器标志。但它仅说明主机上是否存在 SSE 版本。

这因平台而异,例如:/arch:sse4.1 vs -msse4.1

那么我是否缺少 cmake 内部处理不同编译器的此设置的内容,或者我只需要检查平台并相应地设置 target_compile_options ?

joh*_*003 5

根据 lubgr 的回复,我设计了这个:

add_library(sse4_1 INTERFACE IMPORTED)
if(MSVC)
    target_compile_options(sse4_1 INTERFACE /arch:SSE4.1)
else()
    target_compile_options(sse4_1 INTERFACE -msse4.1)
endif()
Run Code Online (Sandbox Code Playgroud)

  • 看起来不错,而且由于它反复出现,拥有可以注入的目标似乎很方便。这肯定比必须对每个目标执行 if/else 更好。尽管如此,每当我必须在 cmake 中输入编译器特定的标志时,我仍然感到有点奇怪。也许 SIMD 设置最终会出现在编译功能中。 (3认同)