Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2013 如何以生成Visual Studio 2013的方式配置cmake+;带有/MP选项的项目文件_Visual Studio 2013_Cmake - Fatal编程技术网

Visual studio 2013 如何以生成Visual Studio 2013的方式配置cmake+;带有/MP选项的项目文件

Visual studio 2013 如何以生成Visual Studio 2013的方式配置cmake+;带有/MP选项的项目文件,visual-studio-2013,cmake,Visual Studio 2013,Cmake,我有一个cmake项目,有许多cpp文件(大约400+),使用/MP(多线程)编译器选项可以显著加快多核CPU上的编译速度 问题是,每次我使用CMake重新生成解决方案文件时,该选项都被禁用,导致编译速度非常慢。我可以通过在VisualStudio中手动更改每个项目(解决方案由许多不同的项目组成)的选项来解决这个问题。但是,每次我通过运行CMake重新生成解决方案文件时(例如,当我获取其他人的更改,添加/删除了一些文件时),此更改都会被覆盖 如何使其持久化,以使CMake始终在VS项目中启用多线

我有一个cmake项目,有许多cpp文件(大约400+),使用/MP(多线程)编译器选项可以显著加快多核CPU上的编译速度

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

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

将以下内容放在项目主
CMakeLists.txt
文件的顶部:

cmake_minimum_required(VERSION 2.8.12)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
如果您不能或不想更改主
CMakeLists.txt
文件,则始终可以手动将您的标志添加到
CMAKE\u CXX\u标志
缓存变量中,例如使用(假设您的CMAKE项目本身没有强制执行
CMAKE\u CXX\u标志的值

参考资料


哪个版本引入了此选项?我现在在debian上遇到了一些错误,比如使用古老的CMake版本时出现的“未知选项添加\编译\选项”。是否可以以某种方式包装它,以便在旧的cmake版本上忽略它?@Petr如果您还想支持旧版本,我建议不要使用
add\u compile\u options()
,而是使用一个即使旧版本也能理解的命令。我已经相应地更新了答案。
project(...)
if (MSVC)
    add_definitions("/MP")
endif()