c语言编译路径怎么调,如何为cmake指定新的gcc路径

不要覆盖CMAKE_C_COMPILER,但出口CC(和CXX)调用cmake的面前:

export CC=/usr/local/bin/gcc

export CXX=/usr/local/bin/g++

cmake /path/to/your/project

make

出口只需要进行一次,首次配置了项目,那么这些值将从CMake缓存中读取。

UPDATE:因为它不会通过CMake的缓存,因为它发挥出色:对杰克的评论

我建议不要重写CMAKE_C(XX)_COMPILER价值主要有两个原因后,为什么不重写CMAKE_C(XX)_COMPILER较长的解释打破编译器检查和工具检测。

当使用set命令,你有三种选择:

没有缓存,创建一个普通的变量

与高速缓存,创建一个缓存变量

力缓存,总是强制

:配置

时候让我们来看看,以set三种可能的呼叫会发生什么缓存值

没有缓存

set(CMAKE_C_COMPILER /usr/bin/clang)

set(CMAKE_CXX_COMPILER /usr/bin/clang++)

执行此操作时,您可以创建一个“正常”变量CMAKE_C(XX)_COMPILER隐藏同名的缓存变量。这意味着您的编译器现在在您的构建脚本中被硬编码,并且您无法给它一个自定义值。如果你有多个编译环境不同的编译环境,这将是一个问题。每次你想使用不同的编译器时,你都可以更新你的脚本,但是这首先消除了使用CMake的价值。

好吧,那么我们再来更新缓存...

随着缓存

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")

set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")

这个版本只是 “不行”。CMAKE_C(XX)_COMPILER变量已存在于缓存中,因此除非您强制更新,否则它不会更新。

啊......让我们使用武力,那么......

部队缓存

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)

set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)

这几乎是一样的“普通”变量版本,唯一的区别就是你值将在缓存中设置,以便用户可以看到它。但是任何更改都将被set命令覆盖。

打破编译器检查和工装

早在配置过程中,CMake的编译器进行检查:是否行得通?它能够生成可执行文件吗?它还使用编译器来检测相关工具,如ar和ranlib。当您在脚本中覆盖编译器值时,它“太迟了”,所有检查和检测都已完成。

例如,我的机器上用gcc默认的编译器上,使用set命令/usr/bin/clang时,ar设置为/usr/bin/gcc-ar-7。在运行CMake之前使用导出时,它设置为/usr/lib/llvm-3.8/bin/llvm-ar。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值