当编译器为MSVC时,请使用cmake使用/ Ox编译器标志

时间:2020-10-14 08:00:59

标签: visual-c++ cmake generator-expression

我正在尝试重写项目的CMakeLists.txt文件(具体来说是Darknet,如果有帮助的话)。在该文件中,有如下几行:

if(MSVC)
  set(ADDITIONAL_CXX_FLAGS "/wd4013 /wd4018 /wd4028 /wd4047 /wd4068 /wd4090 /wd4101 /wd4113 /wd4133 /wd4190 /wd4244 /wd4267 /wd4305 /wd4477 /wd4996 /wd4819 /fp:fast")
  set(ADDITIONAL_C_FLAGS "/wd4013 /wd4018 /wd4028 /wd4047 /wd4068 /wd4090 /wd4101 /wd4113 /wd4133 /wd4190 /wd4244 /wd4267 /wd4305 /wd4477 /wd4996 /wd4819 /fp:fast")
  set(CMAKE_CXX_FLAGS "${ADDITIONAL_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
  set(CMAKE_C_FLAGS "${ADDITIONAL_C_FLAGS} ${CMAKE_C_FLAGS}")
  string(REGEX REPLACE "/O2" "/Ox" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
  string(REGEX REPLACE "/O2" "/Ox" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
endif()

我将上述内容替换为生成器表达式:

$<$<CMAKE_CXX_COMPILER_ID:MSVC>:/wd4013 /wd4018 /wd40x8 /wd4047 /wd4068 /wd4090 /wd4101 /wd4113 /wd4133 /wd4190 /wd4244 /wd4267 /wd4305 /wd4477 /wd4996 /wd4819 /fp:fast>

现在用string()替换行,我看到它用/O2替换了/Ox。我的问题是使用cmake版本3+甚至有必要吗?如果是,那么我如何告诉cmake使用/Ox而不是/O2来使用生成器表达式?

0 个答案:

没有答案
相关问题