【问题标题】:Is it possible to build binaries for different targets using CMake?是否可以使用 CMake 为不同的目标构建二进制文件?
【发布时间】:2013-09-20 15:38:12
【问题描述】:

我正在考虑将 CMake 用于针对微控制器的项目。我发现了如何创建工具链文件并调用cmake -DCMAKE_TOOLCHAIN_FILE=Path/To/Toolchain.cmake 以使 CMake 进行交叉编译。

但是,我从事的大多数项目也有必须为主机平台编译的代码。这些通常是单元测试或其他测试工具,它们与将在微控制器上运行的二进制文件共享大部分代码。一个罕见的情况可能是一个项目甚至有两个具有不同指令架构的处理器,因此需要一个主机编译器和两个不同的交叉编译器。

我希望有一个可以统辖它们的版本。是否有可能有一个我只需要调用cmake /path/to/source && make 的结构,或者是唯一具有多个“根”CMakeList.txt 文件的解决方案,每个文件都针对每个目标?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    每次 cmake 运行都将针对一个特定的生成器,从而针对一个平台。

    您可以通过为每个平台设置一个层次结构的 CMakeLists 文件来实现您想要的。您需要达到这样一个点:连续调用cmake .. && make 将构建整个项目。

    然后编写一个主 CMakeLists 为您执行所有这些单独的构建步骤,例如通过ExternalProject_Add 或使用自定义命令。根据您项目的结构,以这种方式仅处理构建所需的工具并将实际项目的源代码直接添加到主 CMakeLists 可能是有意义的。

    【讨论】:

    • 感谢您的回答。我试过这个,它或多或少地工作,但感觉不是很微妙。我现在遇到的一个主要问题是,当您在其中一个子项目中进行更改后调用“主”制作时,这些更改将不会被重建。你必须 cd 进入子项目构建目录,然后自己在那里调用 make
    • @Bart 这确实是一个令人沮丧的限制。外部项目不应该定期更改,因此没有明确支持这种情况(至少我不知道)。
    猜你喜欢
    • 2021-07-30
    • 2016-08-04
    • 2021-01-08
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多