• CMakeLists中Set编译器要放在project设定之前


    个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

    前一段时间做Linux下的编译,遇到一个奇怪的问题,明明设定了使用C Compiler, CXX Copmiler,但是cmake时还是报错,找了clang++编译器,觉得很奇怪。

    1. 出问题的现象

    CMakeLists.txt中的内容

    cmake_minimum_required(VERSION 3.1)
    project(TestProject VERSION 1.1.9 LANGUAGES C CXX)
    SET(CMAKE_C_COMPILER   "/usr/local/bin/gcc")
    SET(CMAKE_CXX_COMPILER "/usr/local/bin/g++")
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    cmake时报错:

    $ cmake ..
    -- The C compiler identification is GNU 4.8.5
    -- The CXX compiler identification is Clang 3.4.2
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/clang++
    -- Check for working CXX compiler: /usr/bin/clang++ -- broken
    CMake Error at /usr/share/cmake3/Modules/CMakeTestCXXCompiler.cmake:53 (message):
      The C++ compiler
    
        "/usr/bin/clang++"
    
      is not able to compile a simple test program.
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2. 出问题的解决

    百思不得其解,为什么设置的编译器不生效呢,怎么找到clang++来编译,哪边还需要设置吗?
    后来偶然尝试,把Set编译器的语句放在project之前,问题解决了。
    修改后CMakeLists.txt内容

    cmake_minimum_required(VERSION 3.1)
    SET(CMAKE_C_COMPILER   "/usr/local/bin/gcc")
    SET(CMAKE_CXX_COMPILER "/usr/local/bin/g++")
    project(TestProject VERSION 1.1.9 LANGUAGES C CXX)
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 问题回顾

    基于这个问题来分析看:
    对于cmake来说,它所支持的基础语法,像project语法,都是对Compiler有依赖的,需要提前设置,才能让project运行时使用。
    对于cmake的语法,cmake_minimum_required,从测试来看,是不依赖compiler的,这个可能是为数不多,不依赖设定的compiler的语句。

    个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

  • 相关阅读:
    话费充值接口文档
    misc类设备驱动0——板载蜂鸣器驱动测试
    html列表
    今天公司来了个拿 30K 出来的测试,算是见识到了基础的天花板
    Go 限流控制《滑动窗口&令牌桶》:time/rate、TokenLimit、PeriodLimit
    深入解析:微软Edge浏览器的防钓鱼与恶意软件保护机制
    3.6.4、随机接入-CSMA/CA协议
    腾讯云服务器如何重置实例密码(单台/多台)
    Android自定义控件(五) 自定义View实现Android Loading效果
    【tcpdump 命令】
  • 原文地址:https://blog.csdn.net/chunyexiyu/article/details/133804527