在macOS上从源代码构建编译Aseprite到组装成App应用(macOS上如何不开着终端窗口)

news2024/11/26 23:47:20

这里记录一下自己构建 Aseprite 流程。关于如何构建可能已经有很多文章写了,但是都没有提到一点:启动的时候需要点击可执行程序,这样是需要终端窗口一直开着的的(如下图),关闭终端就会退出程序,这哪叫应用啊。
请添加图片描述

所以我想将其变成一个像普通 macOS App 的东西,点击图标即可启动,也不会一直开着终端窗口。(仔细一想我还没有这样弄过一个应用呢,就想试试看,当作经验储备了)

准备工作

在 Mac 上,你需要安装:

  1. Xcode(用应用商店)
  2. CMake(用 Homebrew)
  3. Ninja(用 Homebrew)
  4. Skia

这里说一下 Skia 怎么安装:在https://github.com/aseprite/skia/releases下载 Skia 的源代码压缩包,解压放在$HOME/deps/skia,这是个推荐的位置,按理说任何位置都行,后面编译时自己修改一下参数即可。

准备源代码

准备源代码建议从https://github.com/aseprite/aseprite/releases下载.zip格式的发行版压缩包,这是一个安装好所有子模块的完全版源代码。解压放在任何你想的地方就行。

如果你下自己克隆仓库和子模块,那么使用下面的命令即可:

$ git clone --recursive https://github.com/aseprite/aseprite.git
$ cd aseprite

但是这种方法如果你的网络不太好,中间断过一两次,那么最后哪怕安装了所有子模块,也会导致编译无法成功,相当耗时。所以还是建议直接安装压缩包节省时间,下面就不提这种方法了,在INSTALL.md中会提及,可以自己看看。

在源代码中有一个名外INSTALL.md的文件,讲述了如何在各个平台上构建 Aseprite,如果本文的方法不成功,建议看看官方有没有修改。

构建项目

下面是构建编译 Aseprite 的过程。当前目录应该是 Aseprite 的目录下。

首先作为 CMake 的惯例,新建一个build目录,然后进入其中:

$ mkdir build
$ cd build

如果你是 Intel 的 Mac,那么使用下面的命令进行准备:

需要注意下面的DCMAKE_OSX_SYSROOTDSKIA_DIRDSKIA_LIBRARY_DIRDSKIA_LIBRARY这四个变量的值需要根据你自己的情况设置,不一定是这个值。

cmake \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_OSX_ARCHITECTURES=x86_64 \
      -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 \
      -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk \
      -DLAF_BACKEND=skia \
      -DSKIA_DIR=$HOME/deps/skia \
      -DSKIA_LIBRARY_DIR=$HOME/deps/skia/out/Release-x64 \
      -DSKIA_LIBRARY=$HOME/deps/skia/out/Release-x64/libskia.a \
      -G Ninja \
      ..

如果你是 Apple Silicon 的 Mac,那么使用下面的命令进行准备:

cmake \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_OSX_ARCHITECTURES=arm64 \
      -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
      -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk \
      -DLAF_BACKEND=skia \
      -DSKIA_DIR=$HOME/deps/skia \
      -DSKIA_LIBRARY_DIR=$HOME/deps/skia/out/Release-arm64 \
      -DSKIA_LIBRARY=$HOME/deps/skia/out/Release-arm64/libskia.a \
      -DPNG_ARM_NEON:STRING=on \
      -G Ninja \
      ..

接下来用ninja编译即可:

$ ninja aseprite

然后你就可以在build/bin/中看到编译好的aseprite,如下:

请添加图片描述

组装成App应用

这里用“访达”进行演示。

设置App Icon

进入“应用程序”目录(/Applications),新建一个文件夹Aseprite.app
请添加图片描述

接下来添加 Icon,右键菜单选择“显示简介”,然后打开之前编译好的文件,在build/bin/data中有个icons目录,这里有各种样式的 Icon,选择ase.ico,将其拖到简介的左上角,就可以修改好图标了。如下:
请添加图片描述

可以看到“应用程序”里显示的图标也显示修改了。

创建App结构

接下来是修改内部结构,这样就可以点击图标打开应用程序了。

右键应用程序里的Aseprite,点击“显示包内容”,然后新建一个名为Contents的文件夹,再在Contents里面新建一个名为MacOS的文件夹。这时候内容如下:

请添加图片描述

然后将之前build/bin中的data目录和aseprite可执行文件拷贝过来:

请添加图片描述

这时候你点击应用程序里的Aseprite,便会像正常程序一样运行:

请添加图片描述
现在你可以将其拖到 Dock 中,这样每次使用都可以很方便啦!

请添加图片描述

希望能帮到有需要的人~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MEIS —— 前端部分基本配置

项目基本配置 这篇文章我们随着上一篇文章继续往下叙述,主要是将element和windicss等开发配置进项目中,以及基本的一些页面和组件给他完成。 1. 安装element plus 运行: npm install element-plus --save 这里我们是按需引入(自动)&#x…

JavaSE学习--数据类型和运算符

💕"哪里有人喜欢孤独,只不过更不喜欢失望。"💕 作者:Mylvzi 文章主要内容:JJavaSE学习--数据类型和运算符 Java程序是如何运行的? 一.数据类型 整型: 注意事项: 1.整型…

Android 使用Kotlin封装RecyclerView

文章目录 1.概述2.运行效果图3.代码实现3.1 扩展RecyclerView 3.2 扩展Adapter3.3 RecyclerView装饰绘制3.3.1 以图片实现分割线3.3.2 画网格线3.3.3空白的分割线3.3.4 不同方向上的分割线 3.4 使用方法 1.概述 在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装…

Linux 网络编程

套接字(Socket): 通过网络实现跨机通信 作用:一种文件描述符传输层的文件描述符 整个编程中,需要着重注意htonl/htons、ntohl/ntohs、inet_addr等 TCP的C/S实现 循环服务器模型 TCP服务器实现过程 1.创建套接字&a…

Web 中间件怎么玩?

本次主要是聊聊关于 web 中间件, 分为如下四个方面 什么是 web 框架中间件 为什么要使用 web 中间件 如何使用及其原理 哪些场景需要使用中间件 开门见山 web 中间件是啥 Web 框架中的中间件主要指的是在 web 请求到具体路由之前或者之后,会经过一个或…

MyBatis 映射文件(Mapper XML):配置与使用

MyBatis 映射文件(Mapper XML):配置与使用 MyBatis是一个强大的Java持久化框架,它允许您将SQL查询、插入、更新和删除等操作与Java方法进行映射。这种映射是通过MyBatis的映射文件,通常称为Mapper XML文件来实现的。本…

正点原子lwIP学习笔记——MQTT协议

1. MQTT简介 MQTT是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。他的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得他对很多场景来说都是很好的选择,尤其是对于受限的环境如机器与机器的通信(M2M)以及物…

python根据命令行参数动态导入模块或文件

需求 在命令行运行一个 python 文件,同时传入自定义参数: $ python main.py --nodeTable --actioncreate --data"{name: test2, is_sys_obj: False, encoding: UTF8,datconnlimit: -1, variables: []"希望 main.py 接收命令行参数&#xff0…

1.6.C++项目:仿mudou库实现并发服务器之channel模块的设计

项目完整版在: 文章目录 一、channel模块:事件管理Channel类实现二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、代码(一)框架(二…

快速上手 Docker Swarm:构建分布式容器集群、轻松管理节点和服务

什么是Docker Swarm Docker Swarm 是 Docker 的内置编排工具,它允许将多个 Docker 主机组成一个集群,并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力,使得应用程序能够在集群中弹性地运行和扩展。 Docke…

唤醒手腕 Matlab 游戏编程常用技术知识点详细教程(更新中)

Figure 窗口初始化 figure 使用默认属性值创建一个新的图窗窗口。生成的图窗为当前图窗。f figure(___) 返回 Figure 对象。可使用 f 在创建图窗后查询或修改其属性。figure(f) 将 f 指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面。 figure(n) 查找 Nu…

8、Docker-compose容器编排

一、Docker compose 是什么 Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同…

cadence SPB17.4 S032 - 使用room来放置元件

文章目录 cadence SPB17.4 S032 - 使用room来放置元件概述笔记在orcad中设置子原理图的ROOM号码在空的Allegro工程中, 放入板框在allegro中建立room备注补充 - ROOM还得留着END cadence SPB17.4 S032 - 使用room来放置元件 概述 如果在allegro中直接手工或自动放置元件, 放好…

scala基础入门

一、Scala安装 下载网址:Install | The Scala Programming Language ideal安装 (1)下载安装Scala plugins (2)统一JDK环境,统一为8 (3)加载Scala (4)创建工…

单调队列 - 滑动窗口

154. 滑动窗口 - AcWing题库 O(1)求窗口中的最大值/最小值 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double l…

gdb的使用

目录 gdb工具的使用 代码调试相关指令 运行程序指令 r 显示代码的指令 l 给代码打断点 b 查看断点位置 info b 执行代码到断点处停止 关闭断点 d断点编号 关闭某个断点&#xff0c;但不删除 disable编号 打开某个断点 enable断点编号 逐过程调试代码 n 逐语句调试代码 s 查看…

【外设】拓展坞接入外设一直弹窗报错问题

外设相关&#xff1a;多功能拓展坞安装后使用正常但计算机一直弹窗报错 1.基本配置信息&#xff1a; 拓展坞&#xff1a;绿联6合1 笔记本&#xff1a;lenovo &#xff08;硬件:13^i5;系统&#xff1a;win11&#xff09; 外设&#xff1a;1键1鼠1显示器1硬盘 2.存在的问题&am…

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 问题解决

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一&#xff1a;使用预编译指令方法二&#xff1a;使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好&#xff0c;使用 “文…

【单片机】12-串口通信和RS485

1.通信有关的常见概念 区分&#xff1a;串口&#xff0c;COM口&#xff0c;UART&#xff0c;USART_usart和串口区别-CSDN博客 串口、COM口、UART口, TTL、RS-232、RS-485区别详解-CSDN博客 1.什么是通信 &#xff08;1&#xff09;人和人之间的通信&#xff1a;说话&#xff…

java项目之校园餐厅管理(ssm源码+文档)

项目简介 校园餐厅管理实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、商家管理、用户管理、菜系类别管理、校园美食管理、在线下单管理、美食论坛、系统管理。商家前台&#xff1a;首页、校园美食、论坛信息、新闻资讯、我的、跳转到后台、客服。商家&#xff1a;…