代码之家  ›  专栏  ›  技术社区  ›  johnb003

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

  •  0
  • johnb003  · 技术社区  · 6 年前

    我试图遵循现代cmake的指导原则>=至少在3.0版本中,我不会对编译器做任何假设,也不会使用基于目标的命令。

    见: https://www.youtube.com/watch?v=bsXLMQ6WgIk 或者搜索“有效的cmake”。

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

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

    这因平台而异,例如: /拱门:sse4。1对-msse4。1.

    那么,我是否缺少cmake内部的一些东西,可以为不同的编译器处理此设置,或者我只需要检查平台并相应地设置target_compile_选项?

    2 回复  |  直到 6 年前
        1
  •  3
  •   johnb003    6 年前

    根据卢布格的回答,我想出了这个办法:

    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()
    
        2
  •  2
  •   ComicSansMS    6 年前

    对于全局标志,由 全部的 项目中的目标仍然可以使用非基于目标的方法,例如通过调用 add_compile_options .

    出于可维护性的原因,您应该只在一个地方执行此操作,最好靠近根 CMakeLists.txt .

    这样可以避免在整个项目中重复相同的目标依赖关系。不过请注意,这在一定程度上取决于程序员的纪律:一旦你有需要不同标志的单一目标,或者你开始引入多个设置全局标志的地方,这很快就会变成维护的噩梦。