gpt4 book ai didi

c++ - CMake:CMake 构建类型 (DCMAKE_BUILD_TYPE) 有什么作用?

转载 作者:行者123 更新时间:2023-12-02 09:48:15 25 4
gpt4 key购买 nike

我正在使用 CMake(在 CLion IDE 中,但这对于本次讨论无关紧要)。到目前为止,我一直在使用 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") 之类的东西。或 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")为 GCC 设置编译器选项。我假设 CMake 将这些直接传递给编译器。但是,CMake 应该是独立于平台的,并且(至少在原则上)能够使用不同的编译器构建相同的代码。这是否意味着一个人应该做不同的事情?
我一直在考虑使用构建配置。例如,我假设使用构建类型标志调用 CMake:cmake .. -DCMAKE_BUILD_TYPE="Release"启用一些优化。但是,我无法找到有关此标志的确切作用的任何文档(可能是因为它取决于所使用的编译器之类的东西)。我有两个问题:

  • -DCMAKE_BUILD_TYPE="Release"(和其他发布类型)有什么作用(就像人们不知道构建发生在哪里的系统一样)?
  • 查看编译器和 的最佳方式是什么?全部 在构建时实际使用的选项(在命令行和 CLion 等 IDE 中都使用 CMake)?

  • 阅读 CMake 生成的 makefile 以查找标志对我来说似乎不是一个选项。我尝试设置 VERBOSE=yes对于 Make 但不知何故它没有给我编译器标志,只是一些“进入结束退出目录”。

    最佳答案

    1. What does -DCMAKE_BUILD_TYPE="Release" (and other release types) do (as exactly as one can tell not knowing the system where the build happens)?

    它启用在核心 CMake 模块中定义的某些编译器选项,这些选项特定于目标系统。该文档没有准确解释每种构建类型的含义,但名称相当常用。我了解 Release意思是“禁用调试,启用最高优化”。
    例如,模块 Modules/Compiler/GNU.cmake包含以下内容:
    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")


    1. What is the best way to view the compiler and all options actually being used at build time (both using CMake in command line and within an IDE like CLion) ?

    一种方便的方法是编译数据库。格式指定 here并通过选项 CMAKE_EXPORT_COMPILE_COMMANDS 启用.文件 compile_commands.json然后将包含用于编译每个文件的确切命令。
    如果别名为 /usr/bin/c++,则确定编译器可能需要额外的步骤。被使用,这很常见。

    附言在许多情况下,在 Release模式下启用调试可能很有用。而 RELWITHDEBINFO这样做,它不会启用最高优化( -O2 使用 GCC)。因此,我个人发现缺少默认选项。

    关于c++ - CMake:CMake 构建类型 (DCMAKE_BUILD_TYPE) 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63051282/

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