我试图至少遵循现代cmake> = 3.0的准则,在此我不假设任何有关编译器的信息,而使用基于目标的命令。
请参阅:https://www.youtube.com/watch?v=bsXLMQ6WgIk 或搜索“有效cmake”。
我实际上希望FindSSE包含一个没有源的接口目标,但带有它自己的适当链接程序标志。但这仅说明主机上是否存在SSE版本。
这因平台而异,例如: /arch:sse4.1与-msse4.1
那么我是否缺少cmake的内部东西来为不同的编译器处理此设置,还是只需要检查平台并相应地设置target_compile_options?
答案 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
。
这使您不必在整个项目的任何地方重复相同的目标依赖项。请注意,尽管这在某种程度上取决于程序员的纪律:一旦具有需要不同标志的单个目标,或者开始引入设置全局标志的多个位置,这很快就会成为维护的噩梦。