【问题标题】:Is it possible to share header file only with a cc_test target?是否可以仅与 cc_test 目标共享头文件?
【发布时间】:2019-01-24 19:51:10
【问题描述】:

假设我有一个带有单个 cc_library 目标的包和一个用于测试带有单个 cc_test 目标的内部包,如下所示:

mylib/
     BUILD
     mylib.h
     mylib.c
     mylib-private.h
     tests/
         BUILD
         test.c

为了执行一些单元测试,我需要访问“私有”方法,因此我创建了 mylib-private.h,我只想将其包含在测试代码中。
显然,这个头文件不应该是库 API 的一部分,也不应该随它一起提供。

如果我将mylib-private 添加到mylibhdrs - 所有人都可以看到它。
如果我将mylib-private 添加到mylibsrcs - 只有mylib 可以使用它...

有没有办法控制单个头文件的可见性?

【问题讨论】:

    标签: unit-testing header-files bazel build-system


    【解决方案1】:

    不确定这里官方推荐的模式是什么,但我最终将mylibmylib-tests 包含在同一个包中,然后它们都可以将mylib-private 添加到它们的srcs 属性中:

    构建:

    cc_library(
        name="mylib",
        hdrs=["mylib.h",],
        srcs=[
            "mylib.c",
            "mylib-private.h"
        ]
    )
    
    cc_test(
        name="mylib-tests",
        srcs=glob([
            "tests/*.c",
            "mylib-private.h"
        ]),
        deps=[
            "//:mylib"
        ]
    )
    

    还有结构:

    mylib/
         BUILD
         mylib.h
         mylib.c
         mylib-private.h
         tests/
             test.c
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2015-09-08
      • 2018-08-18
      • 2015-07-13
      相关资源
      最近更新 更多