Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
xtx1130 opened this issue Apr 9, 2019 · 4 comments
Open

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

xtx1130 opened this issue Apr 9, 2019 · 4 comments
Labels

Comments

@xtx1130
Copy link
Owner

xtx1130 commented Apr 9, 2019

这篇文章主要介绍使用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 xtx1130 added the nodejs label Apr 10, 2019
@boyxiaolong
Copy link

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

@xtx1130
Copy link
Owner Author

xtx1130 commented Jul 18, 2019

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

@gengjiawen
Copy link

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

@xtx1130
Copy link
Owner Author

xtx1130 commented Jul 29, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants