如果某些 .c 文件包含其他 .c 文件,我该如何构建shared_library?cc_binary规则中没有 hdrs

if some .c file include other .c file, what can i do to build a shared_library? There is no hdrs in the rules of cc_binary

提问人:geek123 提问时间:10/13/2023 最后编辑:geek123 更新时间:10/13/2023 访问量:63

问:

我的项目之前是用cmake编译的,我想使用bazel来重建我的项目,但是发生了一些错误。 有一个包含以下代码的 .c 文件

#define XXX
#include "ABC.c"
#undef XXX

有一个问题。

如果我想编译一个动态库, 我应该把这个文件放在cc_binary的什么地方?cc_binary中没有hdrs,但是我不能把这个文件放在srcs中,因为ABC.c无法编译。

cc_binary(
    name=""
    srcs=[],
)
c linux dll 头文件 bazel

评论

2赞 0___________ 10/13/2023
为什么要包含 C 文件
0赞 geek123 10/13/2023
我不是这个项目的唯一负责人,我无法改变它,所以......哈哈
0赞 user207421 10/13/2023
您可能需要更改它。不要忽视这种可能性。你现在所拥有的肯定是不好的做法,需要一段时间来修复。
0赞 geek123 10/13/2023
sry,但我还有其他选择吗?@user207421

答:

2赞 Benjamin Peterson 10/13/2023 #1

使用 的属性:textual_hdrscc_library

cc_binary(
    name = 'mylib.so',
    linkshared = True,
    deps = [':lib'],
)

cc_library(
   name = 'lib',
   srcs = ["source.c"],
   textual_hdrs = ["include.c"],
   alwayslink = True,
)

评论

0赞 geek123 10/14/2023
感谢您的帮助,但如果 A deps B,飞蛾就无法工作。我必须将 A 和 B 合并在一起吗
0赞 Benjamin Peterson 10/17/2023
A、B 和“飞蛾”的定义是什么?
0赞 geek123 10/17/2023
cc_binary( name = “mylibA.so” ) cc_library( name=A, deps=[:B] ) cc_library( name=B,....) )。看起来 mylibA.so 将缺少 B 的内容
0赞 Benjamin Peterson 10/17/2023
B 大概需要 。alwayslink = True