gpt4 book ai didi

c++ - CMake 中的全程序优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:58 29 4
gpt4 key购买 nike

如何从 CMake 启用 WholeProgramOptimization

这是我尝试过的:

  • 我安装了 CMake 3.10.2
  • 我安装了 Visual Studio 2017 15.5.4
  • 我创建了一个目录 C:\Wpo
  • 我创建了一个空目录 C:\Wpo\Build
  • 我创建了一个 C:\Wpo\Wpo.cpp 文件,其中包含 int main(){return 0;}
  • 我创建了一个包含以下内容的 C:\Wpo\CMakeLists.txt 文件:

    CMAKE_MINIMUM_REQUIRED (VERSION 3.10)
    PROJECT(Wpo)
    ADD_EXECUTABLE(Wpo "../Wpo.cpp")
    TARGET_COMPILE_OPTIONS(Wpo PRIVATE "$<$<CONFIG:Release>:/GL>")
    SET_TARGET_PROPERTIES(Wpo PROPERTIES LINK_FLAGS_RELEASE "/LTCG")
  • 我打开了一个命令行并创建了我的 Visual Studio 解决方案:

    cd C:\Wpo\Build
    cmake ..

但是当我在 Visual Studio 中打开我的解决方案时,未设置整个程序优化。有趣的是,在 vcxproj 文件中有一个WholeProgramOptimization:

      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AssemblerListingLocation>Release/</AssemblerListingLocation>
<CompileAs>CompileAsCpp</CompileAs>
<ExceptionHandling>Sync</ExceptionHandling>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<Optimization>MaxSpeed</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>

<WholeProgramOptimization>true</WholeProgramOptimization>

<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)</ObjectFileName>
<DebugInformationFormat></DebugInformationFormat>
</ClCompile>
</ItemDefinitionGroup>

如果我从项目的属性中手动选择全程序优化,则会在 vcxproj 文件的另一部分添加一个条目:

      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>

<WholeProgramOptimization>true</WholeProgramOptimization>

</PropertyGroup>
  • 这是 CMake 的错误吗?它似乎在错误的位置添加了这个 WholeProgramOptimization 部分。
  • 这是 Visual Studio 的错误吗?也可能是回归。
  • 我是否采用了一种已弃用的方式来执行此操作?这种情况在 CMake 中经常发生 ;-)

如有任何帮助,我们将不胜感激。

最佳答案

在 Visual Studio 项目中有 3 个地方涉及整个程序优化设置 -

1) 在项目级别(项目 → 常规选项卡)

WholeProgramOptimization

这是启用整个程序优化的便捷元设置。

在项目 XML 中它位于 <PropertyGroup>/<WholeProgramOptimization>

2) 在编译器级别(C/C++ → 优化选项卡)

WholeProgramOptimization /GL

这是实际的 /GL设置,它默认为项目级设置。

在项目 XML 中它位于 <ItemDefinitionGroup>/<ClCompile>/<WholeProgramOptimization>

3) 在链接器级别(链接器 → 优化选项卡)

Link-Time Code Generation /LTGC

这是实际的 /LTCG设置,它默认为项目级设置。

在项目 XML 中它位于 <ItemDefinitionGroup>/<Link>/<LinkTimeCodeGeneration>

以下 CMake 命令不会设置 WholeProgramOptimization在项目级别,但在编译器和链接器级别。这就是为什么“常规”选项卡中的“便利”设置为空白的原因。然而,净效果是一样的。 WholeProgramOptimization 开启。

set_target_properties(Wpo PROPERTIES COMPILE_FLAGS "$<$<CONFIG:Release>:/GL>")
set_target_properties(Wpo PROPERTIES LINK_FLAGS "$<$<CONFIG:Release>:/LTCG>")

关于c++ - CMake 中的全程序优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431918/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com