CMake编译器独立标志

时间:2019-04-18 06:28:26

标签: cmake

是否可以设置任何独立于编译器的标志?我希望能够将单个变量设置为OPTIMIZE_MOST并在gcc上获得-O3,在MS C ++编译器中获得/O2。有什么我可以使用的,还是应该分别为每个编译器设置标志?

2 个答案:

答案 0 :(得分:1)

简单地说:否,没有标志可以直接为每个编译器独立设置优化级别。

但是,CMake提供了所谓的build types。它们独立于使用的编译器,每个都有预定义的标志选择,其中之一是优化标志。

可用的构建类型为

  • Release
  • RelWithDebInfo
  • MinSizeRel
  • CMakeLists.txt

有关全面的解释,请参阅this answer。它还提供了一些代码,当它们包含在message("CMAKE_C_FLAGS_DEBUG is ${CMAKE_C_FLAGS_DEBUG}") message("CMAKE_C_FLAGS_RELEASE is ${CMAKE_C_FLAGS_RELEASE}") message("CMAKE_C_FLAGS_RELWITHDEBINFO is ${CMAKE_C_FLAGS_RELWITHDEBINFO}") message("CMAKE_C_FLAGS_MINSIZEREL is ${CMAKE_C_FLAGS_MINSIZEREL}") message("CMAKE_CXX_FLAGS_DEBUG is ${CMAKE_CXX_FLAGS_DEBUG}") message("CMAKE_CXX_FLAGS_RELEASE is ${CMAKE_CXX_FLAGS_RELEASE}") message("CMAKE_CXX_FLAGS_RELWITHDEBINFO is ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") message("CMAKE_CXX_FLAGS_MINSIZEREL is ${CMAKE_CXX_FLAGS_MINSIZEREL}") 文件中时,有助于识别相关标志:

* {
  direction: rtl;
  unicode-bidi: bidi-override;
}

input[type="text"]:-moz-placeholder {
  unicode-bidi: bidi-override;
}

input[type="text"]:-ms-input-placeholder {
  unicode-bidi: bidi-override;
}

input[type="text"]::-webkit-input-placeholder {
  unicode-bidi: bidi-override;
}

答案 1 :(得分:0)

一定程度上。对于某些概念,CMake支持以与编译器无关的方式指定它们,通常是通过在有关目标上设置属性来进行指定。不幸的是,没有一个地方会列出所有这些可能性。我经历了当前的list of target properties,并将以下属性标识为“抽象化构建工具选项语法”:

  • COMPILE_PDB_NAME
  • INCLUDE_DIRECTORIES
  • INSTALL_RPATH
  • INTERPROCEDURAL_OPTIMIZATION
  • LINK_DIRECTORIES
  • LINK_LIBRARIES
  • PDB_NAME
  • PDB_OUTPUT_DIRECTORY
  • (以及用于设置输出名称,路径等的属性)

除了IPO之外,显然没有其他可用于处理优化标志的东西。

据我所知,也没有通用的过程来添加它们-当有人发现需要它们(以及实现它们的时间)时,它们就会被添加到CMake中。