前言
笔者使用m系列芯片的mac,需要一款开源截图软件,需要标注功能,然后发现了开源项目https://github.com/SunnyCapturer/FLIPPED,比较美观,关键是功能简单,简单就是王道,但是项目已经好几年没更新了,没有ARM版本的软件,尝试自编译ARM应用。
笔者本身没有任何qt开发经验,也没有mac桌面软件开发经验,借助AI能力使用开源项目来实现,分享经验。
开源项目问题
这个开源项目是简单,截图的关键功能有,其他用的少的一律没有,简洁。但是作者自己并不提供mac版本的app,老版本提供了x86的app,对于ARM版本应用就需要转义,且mac OS 27开始准备移除rosetta。尝试编译ARM版本app,其中代码部分使用AI提示解决,效果图:

自编译
准备阶段
MacOS / Linux
Kit Tools:
- MacOS: MacOS 10.15 & Qt 5.15.2 & CMake 3.24 & Clang 12.0
- Linux: Ubuntu 20.04 & Qt 5.15.2 & CMake 3.24 & GCC 9.4
Compile Step:
git clone --recursive https://github.com/XMuli/Flipped.git cd Flipped mkdir build & cd build cmake .. make -j16
笔者是macOS 15系统,m4,笔者试图使用qt6编译,发现太多修改项了,所以使用brew安装了qt5
其他都是系统自带,包括xcode的插件,步骤执行
1. qt5安装
brew install qt@5
这步只要配置好国内源,可以正常执行
2. git代码拉取
然后执行git clone,这步需要科学上网,可以快速拉取
3. 目录准备
创建目录时需要分2步,先mkdir 再 cd
4. cmake
当执行cmake时问题出现了,其实这里不需要AI能力
问题1:找不到qt命令
毕竟qt5安装是通过brew,没有配置环境变量,当然如果按照qt最新版,brew会自动配置环境变量
所以需要vim ~/.zshrc
bash
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
source ~/.zshrc
问题2:第三方包的make最小版本限制
在QHotkey中CMakeLists文件的cmake_minimum 3.1限制,笔者电脑自带的clang比较新,需要3.5才能,修改为如下解决
cmake_minimum_required(VERSION 3.5)
问题3:找不到qt的lib
brew安装目录在,/opt/homebrew/Cellar/qt@5/5.15.18/lib,但是识别的brew目录在/opt/homebrew/lib下,所以可以ln -s 创建软链接
此时可以正常cmake了,但是问题还有一堆
5. make
通过上面的方式,可以正常cmake,但是make时也是一堆问题
问题1:std::map<const QString, const QString> map的k v使用const修饰
直接编译报错,笔者很久没写c++代码了,通过AI问答解决,移除const常量修饰,毕竟String应该是常量
std::map<QString, QString>
问题2:第三方编译包目录不正确
bash
[ 97%] Linking CXX executable /Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED
ld: warning: search path '/Users/huahua/Downloads/Flipped/src/../bin/bin' not found
ld: warning: search path '/Users/huahua/Downloads/Flipped/src/../bin/3rdparty/QHotkey' not found
/bin/sh: /Users/huahua/Downloads/Flipped/src/../bin/FLIPPED.app: No such file or directory
make[2]: *** [/Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED] Error 127
make[2]: *** Deleting file `/Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED'
make[1]: *** [src/CMakeFiles/FLIPPED.dir/all] Error 2
make: *** [all] Error 2
这个就奇葩了,发现第三方包并未编译,所以笔者没改cmake的文件脚本,直接编译第3方包,然后手动创建这些目录,把编译好的内容放进去
直接在第三方包的目录
mkdir build
cd build
cmake ..
make
然后找到如下包,放到上面要求的目录

问题3:编译macOS需要x11
实际上macOS不需要x11,x11是linux的窗口管理器,这个简单,去掉x11的模块引入,cmake文件注释掉
cpp
if (UNIX)
# target_link_libraries(${project_name} PRIVATE ${qt_version_moduls} qhotkey X11)
target_link_libraries(${project_name} PRIVATE ${qt_version_moduls} qhotkey)
else()
target_link_libraries(${project_name} PRIVATE ${qt_version_moduls} qhotkey)
endif()
问题4:2行指令错误
bash
[ 97%] Linking CXX executable /Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED
/bin/sh: /Users/huahua/Downloads/Flipped/src/../bin/FLIPPED.app: No such file or directory
make[2]: *** [/Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED] Error 127
make[2]: *** Deleting file `/Users/huahua/Downloads/Flipped/bin/FLIPPED.app/Contents/MacOS/FLIPPED'
make[1]: *** [src/CMakeFiles/FLIPPED.dir/all] Error 2
make: *** [all] Error 2
这个很奇怪,查询AI,分析代码,发现如下代码报错

笔者直接在cmake的代码指令注释掉,看代码,应该是app打包的过程,实际上不需要,只需要app文件即可。
再次执行make,执行成功。
问题5:app信息优化
执行成功的app文件,实际上很多信息不全,没有图标
修改info.plist文件,搬运图标到Resources下,补全信息
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>FLIPPED</string>
<key>CFBundleGetInfoString</key>
<string>FLIPPED</string>
<key>CFBundleIconFile</key>
<string>logo_archive</string>
<key>CFBundleIdentifier</key>
<string>https://thinkymate.com</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string>2.3.0</string>
<key>CFBundleName</key>
<string>FLIPPED</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.3.2</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict>
</plist>
总结
其实笔者试图使用AI写一个截图工具,但是AI还是不是很行,写的乱七八糟,当然有可能笔者没写过桌面程序,所以干脆使用开源项目编译。但是即使编译也遇到了很多问题,如果使用AI解决估计大部分没有程序经验的解决不了,因为实际的问题和代码不一定有直接的关联,所以AI辅助解决问题,笔者成功的使用开源项目编译了ARM版本的mac截图app。但是还是有warn未解决,不影响使用就不解决了。
