如何在CMake中指定编译器?

2024-02-20

我想使用 IAR 编译器。我注意到 CMake 已经有一堆关于这个编译器的文件:

https://github.com/jevinskie/cmake/blob/master/Modules/Compiler/IAR.cmake https://github.com/jevinskie/cmake/blob/master/Modules/Compiler/IAR.cmake

根据我的阅读,常见的解决方案是手动指定我的所有工具链CMakeLists.txt:

set(CMAKE_C_COMPILER iccarm)
set(CMAKE_CPP_COMPILER iccarm)

CMake 如何将这些定义与“Modules/Compiler/IAR.cmake”链接起来?

我以为我只需要做

include("Modules/Compiler/IAR.cmake")

指定 IAR 编译器的正确方法是什么?

当我做

cmake .

它仍然尝试使用gcc而不是我的 IAR 编译器。为什么?


要选择特定的编译器,您有多种解决方案,如中所述CMake 维基 https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#how-do-i-use-a-different-compiler:

方法一:使用环境变量

对于 C 和 C++,设置CC and CXX环境变量。不保证此方法适用于所有生成器。 (具体来说,如果您尝试设置 XcodeGCC_VERSION,这个方法会让 Xcode 感到困惑。) 例如:

CC=gcc-4.2 CXX=/usr/bin/g++-4.2 cmake -G "Your Generator" path/to/your/source

方法2:使用cmake -D

设置适当的CMAKE_FOO_COMPILER变量到有效的编译器名称或命令行上的完整路径,使用cmake -D。 例如:

cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source

方法3(避免):使用set()

设置适当的CMAKE_FOO_COMPILER变量到有效的编译器名称或列表文件中的完整路径,使用set()。这必须在设置任何语言之前完成(即:在任何语言之前)project() or enable_language()命令)。 例如:

set(CMAKE_C_COMPILER "gcc-4.2")
set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.2")

project("YourProjectName")

维基百科没有提供为什么应该避免第三种方法的原因......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在CMake中指定编译器? 的相关文章

  • CMake - 将预构建库链接到 C# 项目

    我正在使用 CMake 构建 C 库 该库依赖于已构建的库 dll 我似乎无法让图书馆链接到我的图书馆 我尝试过使用target link libraries mylib external lib 我也尝试过暴力破解 reference e
  • 在cmake中,什么是“项目”?

    这个问题是关于project命令 推而广之 是什么concept of a project意思是cmake中的 我真的不明白什么是project是 以及它与target 我想我确实理解 我看了一下cmake 文档project http w
  • 有人为 MSP430 的 IAR Embedded Workbench 实现了 __getzone() 吗?

    我必须在我的应用程序中处理一些时间转换 我想尽可能坚持使用标准库函数 现在我使用 time t 结构作为我的系统时间基准 但是 某些设备可以将时间同步到我的设备 该时间可能是也可能不是 UTC 此外 我的设备会将时间同步到另一台设备 并且该
  • 如何使用 --build 选项查看 cmake 发出的命令

    当我运行 cmake build target INSTALL 命令时 如何查看发出的命令 似乎没有像 versbose之类的选项 cmake 帮助说 cmake build 是底层构建工具的接口 但没有说明有关发出的命令转储的任何内容 我
  • 为 CMake 中的子目录生成“干净”目标

    我想生成一个clean子目录的目标 我的项目结构是这样的 app A B lib A B C 有时我只想在 app A 上运行干净 并且不想清理库 是否可以告诉 CMake 生成clean每个目录的目标 或者像这样的自定义目标应用程序清理哪
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 在 C 中使用 pow 时,CMake 可以检测是否需要链接到 libm 吗?

    对于某些编译器 using powC 程序中的某些其他函数需要链接到m library https stackoverflow com q 8671366 1959975 但是 某些编译器不需要这样做 并且在链接到m图书馆 C 也存在几乎相
  • 如何判断给定目标是库还是可执行文件?

    内置功能install TARGETS 将库目标安装到可执行目标之外的其他位置 我想做类似的事情 给定目标名称列表 我想将其中的所有库目标添加到列表变量中 并将所有运行时目标添加到另一个变量中 我找不到 CMake 的默认目标属性列表 但我
  • CMake 创建可执行文件时未定义的引用

    我是 CMake 新手 我正在尝试编译我的项目 该项目创建了一些静态库和一些可执行文件 下面是我拥有的文件结构的示例 PROJECT SRC 子项目 1该文件夹的 cpp 所有源文件 和CMakeLists txt 1 创建静态库 子项目
  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest
  • 如何将最新的 Windows SDK 版本传递给 CMake?

    如何将最新的 Windows SDK 版本传递给 CMake 这样我就不需要进入 Visual Studio 并从配置属性 常规中手动放置它 我在互联网上搜索 找到了 CMAKE SYSTEM VERSION 变量 并且尝试使用 set C
  • 使用 CMake 在 iOS 中使用另一个 STATIC 库创建一个 STATIC 库

    我有一个 libfooi a 的集合 libfoo1 a libfoo2 a libfoo3 a 使用工厂 带有静态代码 有一个公共接口来创建 C 对象 使用 CMake 我选择其中之一 并创建一个链接它并添加所有内容的 libfooWra
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 在 CMake 中使用 GLOB 指定源文件还是单独指定每个文件更好?

    CMake 提供了多种方法来指定目标的源文件 一种是使用通配符 文档 https cmake org cmake help latest command file html 例如 FILE GLOB MY SRCS dir 另一种方法是单独
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • CMake 添加对安装目标的依赖

    我在使用cmake时遇到以下问题 我使用 UseDoxygen 来自http tobias rautenkranz ch cmake doxygen http tobias rautenkranz ch cmake doxygen 为我的图
  • 我可以安装共享导入库吗?

    我有一个外部项目和一个导入的共享库 include 目录和 implib 都可以正常工作 但尝试安装共享库 dll 失败并出现以下错误 install TARGETS given target my shared lib which doe
  • 是否可以让 cmake 构建文件(CMakeLists.txt)不在 CLion 的根目录中

    是否可以让 cmake 构建文件 CMakeLists txt 不在 CLion 的根目录中 我目前正在开发的项目中 cmake 构建文件不在 CLion 项目的根目录中 在 out Debug 目录中 我希望 CLion 打开该项目的根目
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的

随机推荐

  • 使用文件名中的当前日期创建文件 + Robocopy 日志记录

    由于对批处理文件 脚本和一般 编码 的经验很少 我很快就遇到了我想要创建的批处理的问题 情况如下 我有一个文件夹 其中自动插入 txt 文件 我想根据文件的名称将这些文件移动到不同的文件夹 我用 Robocopy 做了这个 效果很好 然后我
  • 如何为 AlertDialog 创建 setAdapter()

    我创建了一个CustomDialogBuilder延伸Dialog 我想创建方法setApater 我创建了该部分 但是onClick适配器上的方法不起作用 My customDialogBuilder下面给出了类 public class
  • 为什么带有转换器的多重绑定在工具提示中不起作用?

    对于相当复杂的 WPF 工具提示的一部分 我尝试使用 MultiBinding 来生成基于两个属性的格式化文本 问题是 绑定的 MultiConverter 接收DependencyProperty UnsetValue对于其中的每个项目v
  • matplotlib matshow xtick 顶部和底部标签

    我正在尝试可视化名称共现矩阵 这个版本工作正常 import pandas as pd import numpy as np import string import matplotlib pyplot as plt n 10 names
  • 在 GitHub 上以协作者身份编辑文件

    我正在尝试对我被邀请作为合作者的 GitHub 存储库进行更改 我可以创建新文件并修改它们 但是当我尝试对现有文件进行任何更改时 我看到这条消息说 您必须在分支上才能对该文件进行或建议更改 然后 只有在通过终端推送提交后 我才能在 GitH
  • FEATURE_ACTIVITY_TRANSITIONS 与 FEATURE_CONTENT_TRANSITIONS

    我无法理解这两者之间的区别Window http developer android com reference android view Window html标志 但我不能 100 确定何时需要使用每一个以及为什么 的文档Window
  • 为什么 Flutter 小部件是不可变的?

    我无法理解为什么 Flutter 对象是不可变的 我在 Flutter 文档中尝试过 但没有那么有帮助 如果有人能帮助我解决这个问题 我将不胜感激 另外 我两天前才开始使用 flutter 非常棒 From https api flutte
  • 如何使用python捕获网络流量[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 python 并尝试抓取我的计算机和站点之间的 HTTP s 流量 其中包括所有传入和传出请求 响应 例如图像和外部调用等
  • @ngrx/store 是可观察到的热还是冷?

    我认为它是一个冷可观察的对象 默认情况下 但在代码或文档中找不到对它的引用 抱歉 如果已经问过这个问题 找不到东西 TLDR这是一个热门的观察点 因为动作主题 https github com ngrx platform blob mast
  • 如何在 vscode 中根据自定义的 launch.json 创建模板?

    对于我的项目 我定制了我的启动 json file 如何将自己的自定义启动配置保存为模板 就像C GDB LLDB 模板 这样我每次打开新文件夹 项目 时都可以轻松地重新使用它 我不想将其添加到下面全局启动配置 https code vis
  • 如何订购淘汰赛绑定?

    我正在使用 Knockout js 我陷入了一个有点奇怪的情况 很难解释 但我正在尝试 如果我不清楚 抱歉 我在单个选择列表上使用自定义绑定和选项绑定
  • 什么是缓冲区?什么是缓冲读和缓冲写?

    今天很长一段时间后我听到了 缓冲区 这个词 想知道是否有人可以很好地概述缓冲区以及它在当今世界的重要性的一些例子 缓冲区通常是内存的一部分 其中包含尚未完全提交到其预期设备的数据 在缓冲 I O 的情况下 通常有一个快速设备和一个慢速设备
  • 尝试使用 KMS 解密 Lambda 函数中的密文会导致超时

    使用 AWS CLI 从命令行解密密文时 密文可以顺利解密 aws kms decrypt ciphertext blob fileb encrypted secrets output text query Plaintext region
  • 寻找最少矩形来覆盖一组矩形而不重叠的算法

    我有一组矩形 我想 减少 该组 以便用最少数量的矩形来描述与原始组相同的区域 如果可能的话 我希望它也能很快 但我更关心的是让矩形的数量尽可能少 我现在有一个在大多数情况下都有效的方法 Currently I start at the to
  • 使用正则表达式替换时,如何保留匹配字符串的一部分?

    I have 12 hello mp3 21 true mp3 35 good mp3 等等作为文本文件中列出的文件名 我只需要用空格替换数字前面的那些点 例如 12 hello mp3 gt 12 hello mp3 如果我将正则表达式设
  • 合并和分割重叠的矩形以生成不重叠的矩形

    我正在寻找如下算法 给定一组可能重叠的矩形 所有矩形都 未旋转 可以统一表示为 左 上 右 下 连音符等 它返回一组最小的 非旋转 不重叠的矩形 占据相同的面积 乍一看似乎很简单 但事实证明很棘手 至少要高效地完成 this ideas p
  • http 连接错误

    您好 我正在尝试从下面给出的链接获取数据 http abovestress com app stress fetch all detail php task fetchtimefromdateanduserid track date 201
  • 使用 Apple M1 自制软件安装 ruby​​-odbc gem 时出现“错误:sql.h 未找到”

    上下文 在 Apple M1 上 自制程序的位置是 opt homebrew not the usual usr local macOS Intel usr local macOS ARM opt homebrew 当我安装 ruby od
  • Crashlytics 未对代码进行反混淆

    我是 Crashlytics 的新手 我遇到了一个问题 它没有对我的堆栈跟踪进行反混淆 根据 Crashlytics 的说法 这应该是自动发生的 它应该使用 apk 中包含的mappings txt 文件来解密堆栈跟踪 我对整个过程有一些疑
  • 如何在CMake中指定编译器?

    我想使用 IAR 编译器 我注意到 CMake 已经有一堆关于这个编译器的文件 https github com jevinskie cmake blob master Modules Compiler IAR cmake https gi