首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DTrace文件中使用Facebook BUCK?

如何在DTrace文件中使用Facebook BUCK?
EN

Stack Overflow用户
提问于 2020-07-15 22:19:54
回答 1查看 37关注 0票数 0

因此,如果您打开https://github.com/airbnb/BuckSample并尝试使用cocoaPods https://github.com/ReactiveCocoa/ReactiveObjC进行安装

在添加一个新的BUCK构建规则之后,如下所示

代码语言:javascript
复制
apple_third_party_lib(
    name = "ReactiveObjC",
    visibility = ["PUBLIC"],
    srcs = glob([
        "ReactiveObjC/**/*.m",
    ]),
    exported_headers = glob([
        "ReactiveObjC/**/*.h",
    ]),
    frameworks = [
        "$PLATFORM_DIR/Developer/Library/Frameworks/Foundation.framework",
    ],
)

buck build //Pods:ReactiveObjC将失败,错误如下

代码语言:javascript
复制
Pods/ReactiveObjC/ReactiveObjC/RACPassthroughSubscriber.m:12:9: fatal error: 'RACSignalProvider.h' file not found

如果我们继续下去,我们将看到RACSignalProvider.h不在Pod源文件中,但有RACSignalProvider.d,它是DTrace源文件。

当我们尝试用XCode编译它时,我们可以看到在编译实际的框架之前有一个额外的步骤

代码语言:javascript
复制
CompileDTraceScript /*user folder*/Pods/ReactiveObjC/ReactiveObjC/RACSignalProvider.d (in target 'ReactiveObjC' from project 'Pods')
    cd /*user folder*/Pods
    /usr/sbin/dtrace -h -s /*user folder*/Pods/ReactiveObjC/ReactiveObjC/RACSignalProvider.d -o /*user folder*/Library/Developer/Xcode/DerivedData/Odnoklassniki-gsukbcogkxolydbhlpglswzdhhpg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/ReactiveObjC.build/DerivedSources/RACSignalProvider.h

这在我们运行buck build时是不会发生的

配置中是否缺少某些内容?或者这只是BUCK不支持的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 18:32:21

所以答案是,您需要使用genrule()来处理您的DTrace文件,它应该是这样的

代码语言:javascript
复制
genrule(
    name = "ReactiveObjC_DTrace",
    srcs = [
        "ReactiveObjC/ReactiveObjC/RACSignalProvider.d",
        "ReactiveObjC/ReactiveObjC/RACCompoundDisposableProvider.d",
    ],
    bash = 
"""
    mkdir -p $OUT
    /usr/sbin/dtrace -h -s $SRCDIR/ReactiveObjC/ReactiveObjC/RACSignalProvider.d -o $OUT/RACSignalProvider.h
    /usr/sbin/dtrace -h -s $SRCDIR/ReactiveObjC/ReactiveObjC/RACCompoundDisposableProvider.d -o $OUT/RACCompoundDisposableProvider.h
""",
    out = "ReactiveObjC_DTrace",
    visibility = ["PUBLIC"]
)

然后修改您的ReactiveObjC规则,使其如下所示

代码语言:javascript
复制
apple_third_party_lib(
    name = "ReactiveObjC",
    visibility = ["PUBLIC"],
    srcs = glob([
        "ReactiveObjC/**/*.m",
    ]),
    deps = [ 
        "//Pods:ReactiveObjC_DTrace",
    ],
    exported_headers = glob([
        "ReactiveObjC/**/*.h",
        "$(location :ReactiveObjC_DTrace)/**/*.h"
    ]),
    frameworks = [
        "$PLATFORM_DIR/Developer/Library/Frameworks/Foundation.framework",
    ],
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62917069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档