CMakeLists.txt中的编译器标志不会出现在CMake-Gui或CMakeCache.txt中

 Devil灬旋律 发布于 2023-02-06 19:00

我刚刚开始学习CMake并且认为我会理解首先编写的基本过程CMakeLists.txt,然后配置生成CMakeCache.txt并最终生成Makefiles.

但是,当我尝试将它应用于以下CMakeLists.txt时,我没有得到预期的结果,我不确定出了什么问题.CMakeLists.txt的一部分如下所示:

# compiler flags
if (CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fpermissive -Wall -Wformat-security")
    if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
    endif()
endif()

由于我使用的是gcc/g ++ 4.7.3,因此应该设置第一个if语句的编译器标志.但是如果我使用CMake-Gui配置它,则没有任何预定义的编译器标志.当我对if语句进行评论并且只保留时,也会发生同样的情况set(CMAKE_CXX_FLAGS ...).在搜索CMakeCache.txt任何-std=c++11标志时,我也没有得到任何结果.

为什么会这样?CMakeLists.txt在不使用它们时在内部指定编译器标志有什么意义?或者我得到了一些完全错误的东西而且他们被使用了,但后来我不知道为什么以及如何检查.

当生成实际(Eclipse CDT)项目make并将其导入Eclipse时,我收到无法解析C++ 11功能的错误消息,__cplusplus宏包含该值,199711因此-std=c++11显然不使用该标志.

1 个回答
  • 您在CMakeLists.txt文件中指定的标志可能已被编译器正确使用.你不能直接在CMakeCache.txt中看到它们,但是:

      您可以通过运行make VERBOSE=1而不是标准来查看命令行make

      此外,您可以设置CMAKE_VERBOSE_MAKEFILE为1以启用命令打印(可以通过在CMake GUI中选中"高级"来找到)

      正如@Angew所说,如果你真的想在CMake GUI中看到更新的标志,请设置你的变量CACHE FORCE

    作为一个例子,我在一个项目中使用这种配置一个月,从来没有问题:

    if(MSVC) # MSVC compiler (Win32 only)
        # Display more warnings
        set(CMAKE_CXX_FLAGS "/W3")
    elseif(UNIX OR CMAKE_COMPILER_IS_GNUCXX) # Clang OR Gcc (Linux, Mac OS or Win32 with MingW)
        # Enable C++11 and displays all warnings
        set(CMAKE_CXX_FLAGS "-Wall -std=c++11")
        if(APPLE) # Clang / Mac OS only
            # Required on OSX to compile c++11
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -mmacosx-version-min=10.7")
        endif(APPLE)
    endif()
    

    更新:

    从CMake 3.0开始,您可以替换set(CMAKE_CXX_FLAGS "...")add_compile_options(-std=c++11)

    CMake 3.1引入了一种新的语法来配置具有特定C++版本的编译器:

    set(CMAKE_CXX_STANDARD 11)
    

    2023-02-06 19:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有