gpt4 book ai didi

compiler-construction - CMake,g++ : set CXX Flags -02 but -03 is still there?

转载 作者:行者123 更新时间:2023-12-04 10:52:37 25 4
gpt4 key购买 nike

我认为要向 Release模式添加特定的编译器cxx标志。我在另一个线程中读到-O2是发布配置的好标志

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2")

但是如果我现在检查CXX标志
message(${CMAKE_CXX_FLAGS_RELEASE})

他给我写信
-O3 -DNDEBUG -Wall -O2
  • 使用-02代替-03有意义吗?
  • 如何从旗帜中删除-03?
  • DNDEBUG用作什么?

  • 此致

    最佳答案

    使用编译器文档查看O2和O3之间的区别
    并做出选择(例如:-gccHere,您会发现推荐使用O2来实现稳定性

    您可以使用此宏来删除标志:

    macro(remove_cxx_flag flag)
    string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    endmacro()

    [用法]
      macro(remove_cxx_flag flag)
    string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    endmacro()

    message(${CMAKE_CXX_FLAGS_RELEASE}) # print "-O3 -DNDEBUG"
    remove_cxx_flag("-O3")
    message(${CMAKE_CXX_FLAGS_RELEASE}) # print "-DNDEBUG"

    这里使用的是宏,因为您需要从父范围更新变量,请阅读此内容- http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:macro(或者您可以将函数与PARENT_SCOPE修饰符一起使用)

    NDEBUG用于禁用 assert,有关更多信息,请参见 What is the NDEBUG preprocessor macro used for (on different platforms)?

    关于compiler-construction - CMake,g++ : set CXX Flags -02 but -03 is still there?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233513/

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