【问题标题】:How to configure cmake in a way that it generates Visual Studio 2013+ project files with /MP option如何配置 cmake 以使用 /MP 选项生成 Visual Studio 2013+ 项目文件
【发布时间】:2015-11-22 18:26:21
【问题描述】:

我有一个包含许多 cpp 文件(大约 400 多个)的 cmake 项目,并且使用 /MP(多线程)编译器选项可以显着加快具有多个内核的 CPU 上的编译速度。

问题是,每次我使用 CMake 重新生成解决方案文件时,该选项都被禁用,导致编译非常慢。我可以通过在 Visual Studio 中手动更改每个项目(解决方案由许多不同的项目组成)的选项来解决这个问题。但是,每次我通过运行 CMake 重新生成解决方案文件时(例如,当我 git pull 其他人添加/删除某些文件的更改时)此更改都会被覆盖。

如何使其持久化,以便 CMake 始终在 VS 项目中启用多线程编译?

【问题讨论】:

    标签: visual-studio-2013 cmake


    【解决方案1】:

    将以下add_compile_options() 放在项目的主CMakeLists.txt 文件的顶部:

    cmake_minimum_required(VERSION 2.8.12)
    add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
    

    或使用较旧的 CMake 版本

    project(...)
    if (MSVC)
        add_definitions("/MP")
    endif()
    

    如果您不能或不想更改主 CMakeLists.txt 文件,您始终可以手动将标志添加到 CMAKE_CXX_FLAGS 缓存变量,例如通过使用CMake's GUI(假设你的CMake项目本身没有强制CMAKE_CXX_FLAGS的值)。

    参考文献

    【讨论】:

    • 哪个版本引入了这个选项?我现在在 debian 上遇到错误,例如带有古老 CMake 版本的“未知选项 add_compile_options”。是否可以以某种方式包装它,以便在旧的 cmake 版本上忽略它?
    • @Petr 如果你也想支持旧版本,我建议不要使用add_compile_options(),而是使用即使旧版本也能理解的命令。我已经相应地更新了答案。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多