blog icon indicating copy to clipboard operation
blog copied to clipboard

基于xcode进行libuv编程之环境搭建

Open xtx1130 opened this issue 5 years ago • 4 comments

这篇文章主要介绍使用xcode搭建libuv开发环境,当然读者亦可以使用homebrew进行全局安装libuv。此文内容比较基础,主要是给前端开发者抛砖引玉,方便前端开发人员更加深入研究libuv。

libuv本地编译

macOS下面对libuv的编译在官方文档中写的也比较明白了,直接执行如下命令:

$ git clone https://github.com/libuv/libuv.git
$ cd libuv
$ git clone https://chromium.googlesource.com/external/gyp build/gyp
$ ./gyp_uv.py -f xcode
$ xcodebuild -ARCHS="x86_64" -project out/uv.xcodeproj -configuration Release -alltargets

首先 clone下来libuv的主干代码,之后进入到libuv目录中,clone下来gyp到build/gyp目录下。之所以需要gyp是因为接下来我们需要gyp进行xcode工程构建。第四步则是构建xcode工程文件uv.xcodeproj 。最后我们执行xcodebuild来进行libuv编译,最终会在/build/Release/目录下产出静态库libuv.a

xcode工程搭建

打开xcode,选择new->project,在出来的弹窗中我们选择Command Line Tool 点选下一步之后,我们在language一栏中选择C。 之后项目就会自动搭建起来了,接下来我们要做的就是引入libuv的头文件和静态库。
首先我们在finder中打开libuv文件夹,在目录中会有一个include/文件夹, issue36-3 直接把整个文件夹拖拽到新建的xcode工程中: 会出现如下弹窗,如下这几个选项一定要勾选上: 头文件已经被我们成功引入进来了,接下来我们需要引入一下静态链接库libuv.a,再引入之前,我们先在xcode工程下新建一个目录专门用于存放链接库: issue36-6 之后我们在xcode工程中加入这个目录: 选择add Files to 之后,在弹出的文件选择弹窗中选择我们刚刚建好的Frameworks目录,这样我们就把这个文件夹加入到我们的xcode工程中了。
然后我们按照刚才引入头文件的方法,把/libuv/build/Release/libuv.a拖拽到Frameworks目录下,弹窗的选项和刚才引入头文件的选项一致: 之后我们需要改一下头文件的搜索目录,在User Header Search Paths中双击添加,加入刚才我们引入的头文件的目录$(SRCROOT)/include/

try it!

接下来我们改造一下main.c,还是用libuv官方入门的例子:

#include <stdio.h>
#include <stdlib.h>
#include "uv.h"

int main() {
    uv_loop_t *loop = malloc(sizeof(uv_loop_t));
    uv_loop_init(loop);
    
    printf("Now quitting.\n");
    uv_run(loop, UV_RUN_DEFAULT);
    
    uv_loop_close(loop);
    free(loop);
    return 0;
}

写好之后,直接点击一下运行,看看是不是会出现build success的弹窗了~
在这里需要注意一下#include "uv.h"双引号""和尖括号<>的区别:双引号会在 build setting中定义的User Header Search Paths目录中寻找头文件,而尖括号则会在/usr/include/系统目录中寻找头文件。在本文中,我们把头文件单独导入到了项目中,所以需要用双引号来引入uv.h

xtx1130 avatar Apr 09 '19 11:04 xtx1130

工作还是业余mac C编程呢 业余的话我宁愿vs code吧

boyxiaolong avatar Jul 18 '19 09:07 boyxiaolong

@boyxiaolong 业余的。libuv我接触的不多,我写javascript c++ addon一般用sublime。vscode……说句实话,没怎么用过。我调试node项目也是用 node --inspect--bak chrome devtool调试。

xtx1130 avatar Jul 18 '19 11:07 xtx1130

libuv 有cmake支持,可以直接在clion打开。

gengjiawen avatar Jul 26 '19 09:07 gengjiawen

@gengjiawen 恩恩,看到了,非常感谢~文章写的有什么问题还望前辈多多指教!

xtx1130 avatar Jul 29 '19 08:07 xtx1130