# 安装

## xmake

构建工具

[github](https://github.com/xmake-io/xmake/releases)

## clang

c++ 编译器

[github](https://github.com/llvm/llvm-project/releases)

## VS CODE

[https://zhuanlan.zhihu.com/p/398790625](https://zhuanlan.zhihu.com/p/398790625)

[万字长文]Visual Studio Code 配置 C/C++ 开发环境的最佳实践(VSCode + Clangd + XMake)

## 配置

强行修改 xmake.conf

通过 xmake f 设置会失败

```shell
--全局配置  
xmake g --ndk=~/files/android-ndk-r10e/  
--清除配置  
xmake f -c  
--导出配置  
xmake f --export=config.txt  
xmake f -m debug --xxx=y --export=config.txt  
--环境变量  
xmake show -l envs
```
# 项目

## 更新

```shell
# 更新到指定版本
xmake update 2.2.4

#更新到指定分支
xmake update master 
xmake update dev

#更新到指定地址
xmake update github:xmake-io/xmake#master 

#更新脚本
xmake update -s dev

#卸载
xmake update --uninstall 
```



## 创建

```shell
#创建
xmake create zmake

#查询创建模板
xmake create --help

#创建指定模板 语言 + 类型
xmake create -l c -t static zmake
xmake create -t qt.quickapp zmake
xmake create -l cuda test

#指定编译版本
xmake f -m debug

#清除缓存
xmake f -c

```

## 编译

```shell
# 使用帮助
xmake f --help
# 设置编译架构
xmake f -p android --ndk=xxx -a arm64-v8a

# 交叉编译
xmake f -p cross --sdk=/home/toolchains_sdkdir
xmake f -p linux --sdk=/home/toolchains_sdkdir --bin=/usr/opt/bin 
xmake f -p linux --sdk=/user/toolsdk --cc=armv7-linux-clang --cxx=armv7-linux-clang++

# 设置目录
xmake f -p linux --sdk=/usr/toolsdk --includedirs=/usr/toolsdk/xxx/include --linkdirs=/usr/toolsdk/xxx/lib --links=pthread
```

## 生成

```shell
# 生成 vs 项目
xmake project -k vsxmake
# 指定版本 与 模式
xmake project -k vsxmake2022 -m "debug;release"
```

## 运行

```shell
#编译
xmake
#运行程序
xmake run

#触发事件
on_run
```

## 调试

```shell
#输出调试信息
#v 输出 编译指令
xmake -vD
xmake -vD verbose Diagnosis 

# 语法检测
xmake check
xmake check api
xmake check api.target
xmake check -v

# 自动修复
xmake check clang.tidy --fix
```

## 调试Lua源码

```lua
local _luasocket = _PROGRAM_DIR .. "/winenv/bin/core.dll"
package.cpath = package.cpath .. ";" .. _luasocket
require("../winenv/bin/LuaPanda").start("127.0.0.1",8818)
```

## 下载

关闭 curl ssl 证书验证

```shell
 xmake global --help
 xmake global --insecure-ssl=INSECURE-SSL
```



# Lua 接口

```shell
xmake lua /tmp/test.lua 
xmake lua lib.detect.find_tool gcc 

xmake lua
进入lua 交互
```



# 第三方库


## 本地依赖

```shell
# -p android 指定编译平台
# 传递库名 与 编译路径
xmake f -p android --ndk=~/downloads/android-ndk-r19c
xmake f --qt=/home/xxx/qtsdk
```

## 全局依赖

```shell
# 传递库名 与 编译路径
xmake g --ndk=~/xxx/android-ndk-r19c
xmake g --qt=/home/xxx/qtsdk
```

## 示例

```shell
xmake f -p android --ndk=xxx --ndk_sdkver=16
xmake f -p android --ndk=xxx -a arm64-v8a
xmake f -p android --ndk=xxxx --ndk_cxxstl=gnustl_shared
xmake f -p android --ndk=xxxx --ndk_cxxstl=gnustl_shared --ndk_sdkver=16
xmake f --help
```

# QA

## xmake f

强行修改 `.xmake\windows\xmake.conf`

`xmake f -a=x64 -p=windows`

xmake f -cvD

## add_requires

pulling repository(build-artifacts): https://github.com/xmake-mirror/build-artifacts.git to C:\Users\Administrator\AppData\Local\.xmake\repositories\build-artifacts ..  
git -c core.fsmonitor=false pull origin main  
fatal: not a git repository (or any of the parent directories): .git  
error: execv(git -c core.fsmonitor=false pull origin main) failed(128)

手动 git clone [https://github.com/xmake-mirror/build-artifacts.git](https://github.com/xmake-mirror/build-artifacts.git)

## curl ssl problem

由cartalyst / stripe使用的Guzzle将执行以下操作来查找适当的证书归档，以检查服务器证书是否符合以下条件：

1. 检查你的php.ini文件是否设置了`openssl.cafile` 。
   
2. 检查`curl.cainfo`是否在您的php.ini文件中设置。
   
3. 检查是否存在`/etc/pki/tls/certs/ca-bundle.crt` Hat，CentOS，Fedora;由ca-certificates包提供）
   
4. 检查`/etc/ssl/certs/ca-certificates.crt`存在（Ubuntu，Debian;由ca-certificates包提供）
   
5. 检查`/usr/local/share/certs/ca-root-nss.crt`存在（FreeBSD;由ca_root_nss包提供）
   
6. 检查`/usr/local/etc/openssl/cert.pem` X;由homebrew提供）
   
7. 检查是否存在`C:\windows\system32\curl-ca-bundle.crt` （Windows）
   
8. 检查是否存在`C:\windows\curl-ca-bundle.crt` （Windows）
   

https://curl.haxx.se/docs/caextract.html  
curl-ca-bundle.crt

## curl 慢

连 strong vpn 就行