如何在cmake中将构建类型更改为Release模式?

123*_*789 42 windows cmake visual-studio-2010

我正在尝试在发布模式下构建项目.默认情况下,它以调试模式构建.我将变量设置CMAKE_BUILD_TYPE为"Release" CMakeLists.txt.但它仍然在调试模式下构建项目.当我在CMake命令中将"Release"作为构建类型传递时,它仍然不起作用.

我正在使用的CMake命令是:

cmake -G"Visual Studio 10" -DCMAKE_BUILD_TYPE=Release
  -H"source_path" -B"Build path"
Run Code Online (Sandbox Code Playgroud)

请提供解决方案.

小智 116

要在Windows上更改构建类型,必须在构建时完成:

cmake --build {DIR} --config Release
Run Code Online (Sandbox Code Playgroud)

默认情况下它是Debug.我还在寻找一种改变这种默认方式的方法.CMAKE_BUILD_TYPE当然不起作用,调整CMAKE_CONFIGURATION_TYPES也不起作用,显然出于同样的原因,它们只适用于Unix makefile,而不适用于Visual项目.

  • 您没有更改配置构建类型,您正在构建项目的发布配置.虽然答案是对的,但+1 (2认同)
  • 这适合我.另外,当我想要安装时,我会做`cmake --build.--config Release --target install`.然后cmake工作它的魔力! (2认同)

Mak*_*aks 30

我用Visual Studio 2015和cmake 3.3检查了它.

简短的回答

链接

cmake --build {BUILD_DIR_PATH} --target ALL_BUILD --config {BUILD_TYPE}
Run Code Online (Sandbox Code Playgroud)

cmake --build . --target ALL_BUILD --config Release
Run Code Online (Sandbox Code Playgroud)

答案很长

cmake -G{GENERATOR_NAME} -B{BUILD_DIR_PATH} -H{SOURCE_DIR_PATH}

cmake --build {BUILD_DIR_PATH} --target ALL_BUILD --config {BUILD_TYPE}
Run Code Online (Sandbox Code Playgroud)

cmake -GVisual Studio 14 -Bbuild/win32/x86 -H.    

cmake --build build/win32/x86 --target ALL_BUILD --config Release
Run Code Online (Sandbox Code Playgroud)

附加信息

  • "-G" - 指定生成器名称

  • "-B" - 指定构建文件夹的路径

  • "-H" - 指定源文件夹的路径


Com*_*sMS 20

您无法从命令行为Visual Studio设置默认构建类型.

CMake的Visual Studio生成器将生成四个标准配置文件(Debug,RelWithDebInfo,MinSizeRel和Release),您必须从VS中选择要构建的配置文件.这是因为有关活动配置的信息不是CMake生成的项目文件的一部分,而是.suoVS生成的部分文件.

如果要自动构建特定配置,请使用MSBuild而不是VS,它允许您在命令行上指定配置.

  • @ 123r789它用于Makefile生成器,例如当时只允许一个配置文件.像VS这样的IDE生成器一次生成多个配置文件,并允许从IDE中选择一个.使用Makefile时,您只有一个配置文件,因此必须在CMake配置时进行选择.[文档](http://www.cmake.org/cmake/help/v2.8.11/cmake.html#variable:CMAKE_BUILD_TYPE)也明确指出了这一点:_此变量[CMAKE_BUILD_TYPE]仅支持基于make的生成器. _ (7认同)
  • 那么CMAKE_BUILD_TYPE的用途是什么. (5认同)
  • @ixSci您的解决方案不会更改默认值,它会完全删除除Release之外的任何配置.我认为这种问题有点苛刻.我也不同意-1(并不暗示它是你),因为我的答案的中心论点仍然有效:_有关活动配置的信息不是CMake生成的项目文件的一部分,而是.suo文件的一部分由VS._生成 (4认同)
  • 我经常切换构建类型.我看不出只有一种类型也很方便 - 你正在删除有用的功能.这是OP问题恕我直言的正确答案. (4认同)

小智 5

尝试了以下方法,这些方法对我在 Windows 中以发布/调试模式构建二进制文件有用。

CMakeLists.txt在根文件中项目命令上方添加了以下行:

SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
Run Code Online (Sandbox Code Playgroud)

使用以下命令来设置发布模式配置:

cmake -DCMAKE_BUILD_TYPE=Release .. 
Run Code Online (Sandbox Code Playgroud)

使用此命令在发布模式下构建相同的内容:

cmake --build . --config Release
Run Code Online (Sandbox Code Playgroud)

您也可以在调试模式下重复相同的过程,它可以工作。


ixS*_*Sci -22

像您一样使用它,但在根 cmake 文件中在项目关键字之前添加以下内容

SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
PROJECT(MY_PROJECT)#It's here just to show where you should add it.
Run Code Online (Sandbox Code Playgroud)

  • 我们不要忘记您在这里依赖的是未记录的行为。CMake 只保证 CMAKE_BUILD_TYPE 做正确的事情[对于基于 make 的生成器](http://www.cmake.org/cmake/help/v2.8.11/cmake.html#variable:CMAKE_BUILD_TYPE)。您的解决方案可能会突然停止与任何未来的 CMake 版本一起使用。 (10认同)
  • 我的主要论点是这是一种不寻常的技术。如果它用在私人项目中,除了作者之外,没有人需要运行 CMake,那就酷了。如果我必须使用它,一开始我会惊讶地发现只有一种构建类型。一旦我看到原因,它就会变得有点烦人,因为你实际上并没有尝试禁用其他构建类型;您只是强迫多配置用户必须像单配置用户一样工作。 (8认同)
  • 我认为对于那些使用 Visual Studio 的人来说,这将是一种非常意想不到的设置构建类型的方式。虽然它“确实”有效,但我当然不会“推荐”这种方法。 (6认同)
  • 我并不是“决定”这很平常——这是对许多其他项目的工作方式的观察。我可以指出几个不这样做的项目。我不知道有哪一个能做到这一点。对我来说,在 IDE 中单击两次来更改构建类型比打开命令提示符、导航到我的构建根目录,然后输入 `cmake 容易得多。-DCMAKE_BUILD_TYPE=发布`。两者都不难,但我每次都会选择更简单的方法。 (6认同)