如何为cc_library添加默认的 copts,例如 '-fopenmp'?
How can i add default copts like '-fopenmp' for the cc_library?
https://docs.bazel.build/versions/master/be/c-cpp.html
关于科普特选项:
此属性中的每个字符串在编译二进制目标之前按给定顺序添加到 COPTS。这些标志仅在编译此目标时生效,而不是其依赖项,因此请注意包含在其他地方的头文件。所有路径都应相对于工作区,而不是相对于当前包。
cc_library(
name = 'lib1',
srcs = glob([
'src/*.cpp',
]),
hdrs = glob([
'include/*.h',
'include/**/*.h',
]),
copts = [
'-std=c++11',
'-fopenmp',
'-march=native',
],
)
cc_binary(
name = "test1",
srcs = ["tests/test1.cpp"],
deps = [
":lib1",
],
copts = [
'-std=c++11',
'-fopenmp',
'-march=native',
],
)
如果我删除 test1 规则中的 copts,编译将失败。如何修改lib1规则,使所有依赖它的规则也可以编译。
您还需要将linkopts = ["-lgomp"]
添加到cc_binary
规则中。
如果编译时每个目标都需要-std=c++ -fopenmp -march=native
,最好在 build 命令 ( bazel build --copt="-std=c++" --copt="-fopenmp" --copt="-march=native" //src:hello
) 中指定 copts。然后,您可以删除cc_*
规则中的copts
。
另请注意,如果要在一个文件中使用 -march=native
,最好始终确保所有其他文件也使用此标志进行编译,以避免编译器优化可能导致的一些错误。
对我来说,解决方案是将--linkopt='-lgomp'
添加到我的.bazelrc
文件中。为了完整起见,.bazelrc
确切地说是:build --cxxopt='-std=c++17' --cxxopt='-Ofast' --cxxopt='-fopenmp' --linkopt='-lgomp'
巴泽尔版本bazel 3.7.0
.
由于我无法评论@Cheng Ji 的答案,我只想强调他的回答对我有很大帮助,但起初通过在cc_binary
中添加linkops = ["-lgomp"]
不起作用(它抱怨no such attribute 'linkops' in 'cc_binary' rule
)。然后我发现linkops
是一个错字,所以我尝试了linkopts = ["-lgomp"]
,它也起作用了!非常感谢!
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 将数字转换为字母(例如:123 转换为一二三)
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 如何计算数据类型的范围,例如int
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用文件中的文本,例如变量
- 输入值后,如何在一个括号下显示值,例如"{6,7,8,9}
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 初学者问题:如何使用这些晦涩难懂的命令,例如C++中的'RenderWindow'
- C++:将值 int(例如:0x00AAFAD8)转换为指针(指针本身也是 0x00AAFAD8 值)
- 具有多种约束(例如重量、体积等)的背包
- 较高值 n 的分割错误(例如 n=999997)
- 我正在尝试制作一个程序,在添加 n 天(整数)后告诉一个人什么是一天(例如星期一等)
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何为cc_library添加默认的 copts,例如 '-fopenmp'?