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