如何在现代CMake中添加SSE标志?

时间:2018-06-19 18:51:26

标签: c++ cmake

我试图至少遵循现代cmake> = 3.0的准则,在此我不假设任何有关编译器的信息,而使用基于目标的命令。

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

那么,当我的目标取决于SSE 4.1时,应该如何声明此信息?

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

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

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

2 个答案:

答案 0 :(得分:1)

根据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()

答案 1 :(得分:1)

对于项目中 all 目标使用的全局标志,最好仍然使用基于非目标的方法,例如。通过致电add_compile_options

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

这使您不必在整个项目的任何地方重复相同的目标依赖项。请注意,尽管这在某种程度上取决于程序员的纪律:一旦具有需要不同标志的单个目标,或者开始引入设置全局标志的多个位置,这很快就会成为维护的噩梦。