首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于同时处理多个交叉构建的Metabuild工具

用于同时处理多个交叉构建的Metabuild工具
EN

Stack Overflow用户
提问于 2015-03-08 10:45:58
回答 1查看 413关注 0票数 1

我有一个中等规模的C++项目,运行在Linux、Windows和Mac上,包括32位和64位。在某些平台上,它有多个变体(例如,Linux上的Gtk-2和Gtk-3变体)。作为一个爱好程序员,我没有资源为每个平台专用的构建机器。因此,我为每个编译器安装了交叉编译器,以便所有的构建都发生在我的Linux机器上。

我希望能够用一个命令构建所有10个左右的变体。现在,我用一个快速而肮脏的Python脚本来实现这一点,它创建了一个makefile (实际上,我最近转向了忍者,但我想它不是很重要)。它为每个变体创建Windows安装程序、Debian包等等。但是我想要一个更干净的解决方案,因为随着项目的发展,我的脚本不会扩展得很好。

因此,我的问题是:,哪些元工具能够创建单个Makefile (或者类似于忍者构建文件),它可以处理多个工具箱(交叉编译器)和自定义命令(创建安装程序等)?

我尝试了CMake (和其他一些),但是对于我来说,如何使用多个工具箱并不明显。大多数工具似乎每个配置都创建一个Makefile。

编辑:现在,的答案声称这是不可能的。我不明白为什么。如果我能用我的15分钟python脚本来完成它,我觉得一定有一个工具能够为我做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 20:41:33

您可以使用CMake来获得这种行为,使用工具链ExternalProject。不同的makefile仍将在幕后创建,但不会影响用户或项目的可伸缩性。

首先,您需要将项目转换为CMake项目,在CMakeLists.txt文件中的所有不同平台上构建所需的所有ifs和else。

您可以创建一组工具链文件,例如名为<target>.toolchain和交叉构建CMakeLists.txt的文件,在这些文件中,所有的魔术都完成了:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.2)
project(cross-build-project)
include(ExternalProject)

set(project_dir <path to your CMake project>)
set(targets_dir ${CMAKE_SOURCE_DIR}/targets)

function(add_target target_toolchain)
  get_filename_component(target_name ${target_toolchain} NAME_WE)
  ExternalProject_Add(
      ${target_name}
      PREFIX ${targets_dir}/${target_name}
      SOURCE_DIR ${project_dir}
      CMAKE_ARGS -DTOOLCHAIN_FILE=${target_toolchain}
      BINARY_DIR ${targets_dir}/${target_name}
    )
endfunction(add_target)

file(GLOB toolchains "*.toolchain")
foreach(toolchain ${toolchains})
  add_target(${toolchain})
endforeach()

这应该提供一个平台,可以根据您的具体需求进行调整,并与项目进行良好的扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28925530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档