是否可以仅与 cc_test 目标共享头文件?
Is it possible to share header file only with a cc_test target?
假设我有一个包含单个 cc_library
目标的包和一个包含单个 cc_test
目标的测试内包,如下所示:
mylib/
BUILD
mylib.h
mylib.c
mylib-private.h
tests/
BUILD
test.c
为了执行一些单元测试,我需要访问 "private" 方法,所以我创建了 mylib-private.h
,我只想将其包含在测试代码中。
显然这个头文件不应该是库的一部分 API 并且不应该随它一起提供。
如果我将 mylib-private
添加到 mylib
的 hdrs
- 它将对所有人可见。
如果我将 mylib-private
添加到 mylib
的 srcs
- 只有 mylib
可以使用它...
有没有办法控制单个头文件的可见性?
不确定这里官方推荐的模式是什么,但我最终将 mylib
和 mylib-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
假设我有一个包含单个 cc_library
目标的包和一个包含单个 cc_test
目标的测试内包,如下所示:
mylib/
BUILD
mylib.h
mylib.c
mylib-private.h
tests/
BUILD
test.c
为了执行一些单元测试,我需要访问 "private" 方法,所以我创建了 mylib-private.h
,我只想将其包含在测试代码中。
显然这个头文件不应该是库的一部分 API 并且不应该随它一起提供。
如果我将 mylib-private
添加到 mylib
的 hdrs
- 它将对所有人可见。
如果我将 mylib-private
添加到 mylib
的 srcs
- 只有 mylib
可以使用它...
有没有办法控制单个头文件的可见性?
不确定这里官方推荐的模式是什么,但我最终将 mylib
和 mylib-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