多个子项目使用不同的编译器会导致无限循环的bug

发布时间 2023-04-07 15:15:41作者: 马角的逆袭

目录

    记录一次编译错误,CMake不支持对subdirtory使用不同的编译器版本,gcc6和gcc7

    1. 项目情况:一个项目下有两个子项目base-projectbase-project-gpu,前者使用gcc-7编译,后者由于cuda版本是9,所以最高支持到gcc-6
      展开查看:项目主CMakeLists.txt目录截图 drawing

    1. 当在子项目base-project-gpu的CMakeLists.txt中设置编译器为gcc-6,但base-project使用gcc-7时,会导致camke无限循环输出
      展开查看:子项目CMakeLists.txt使用gcc-6截图 drawing

    1. 解决方法:2个项目都用gcc-6,在主CMakeLists.txt中添加
        set(CMAKE_C_COMPILER "/usr/bin/gcc-6")
        set(CMAKE_CXX_COMPILER "/usr/bin/g++-6")
      
      C++17: gcc7完全支持,gcc6和gcc5部分支持,gcc6支持度当然比gcc5高,gcc4及以下版本不支持。 C++14: gcc5就可以完全支持,gcc4部分支持,gcc3及以下版本不支持