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++")
...

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.


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)
...

3. 问题回顾

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夜喜雨

稀罕你的喜欢!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值