bazel编译C++

这篇具有很好参考价值的文章主要介绍了bazel编译C++。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、bazel编译成single target

(1)文件目录

WORKSPACE
main
        BUILD
        print.h
        print.cpp
        demo.cpp

(2)文件内容

BUILD

cc_library(
    name = "print_h",
    hdrs = ["print.h"],
)
cc_binary(
    name = "demo",
    srcs = ["demo.cpp", "print.cpp"],
    deps = ["print_h"],
)

print.h

#include<stdio.h>
void print(void);

print.cpp

#include "print.h"
void print() {
    printf("hello world\n");
}

demo.cpp

#include "print.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
    print();
    return 0;
}

(3)编译命令文章来源地址https://www.toymoban.com/news/detail-745849.html

bazel build //main:demo

二、bazel编译成multi target

(1)文件目录

WORKSPACE
main
    BUILD
    print.h
    print.cpp
    demo.cpp

(2)文件内容

BUILD

cc_library(
    name="print",
    srcs=["print.cpp"],
    hdrs=["print.h"],
)
cc_binary(
    name="demo",
    srcs=["demo.cpp"],
    deps=[":print"],
)

print.h

#include<stdio.h>
void print(void);

print.cpp

#include "print.h"
void print() {
    printf("hello world\n");
}

demo.cpp

#include "print.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
    print();
    return 0;
}

(3)编译命令

bazel build //main:demo

三、bazel编译成multi package

(1)文件目录

WORKSPACE
lib
    BUILD
    print.h
    print.cpp
main
    BUILD
    demo.cpp

(2)文件内容

lib

BUILD

cc_library(
    name = "print",
    srcs = ["print.cpp"],
    hdrs = ["print.h"],
    visibility = ["//main:__pkg__"],
)

print.h

#include<stdio.h>
void print(void);

print.cpp

#include "print.h"
void print() {
    printf("hello world\n");
}

main

BUILD

cc_binary(
    name="demo",
    srcs=["demo.cpp"],
    deps=["://lib:print"],
)

demo.cpp

#include "print.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
    print();
    return 0;
}

(3)编译命令

bazel build //main:demo

四、bazel编译成静态库(.a文件)

1)文件目录

WORKSPACE
lib
    BUILD
    print.h
    print.cpp

(2)文件内容

lib

BUILD

cc_library(
        name="print",
        srcs=["print.h","print.cpp"],
        linkstatic=True
)

print.h

#include<stdio.h>
void print(void);

print.cpp

#include "print.h"
void print() {
    printf("hello world\n");
}

(3)编译命令

bazel build //main:print

生成静态库 libprint.a

五、bazel编译调用静态库(.a文件)

(1)文件目录

WORKSPACE
main
    BUILD
    print.h
    libprint.a
    demo.cpp

(2)文件内容

main

BUILD

cc_import(
        name="print",
        hdrs=["print.h"],
        static_library="libprint.a",
)
cc_binary(
        name="demo",
        srcs=["demo.cpp"],
        deps=[":print"]
)

print.h

#include<stdio.h>
void print(void);

demo.cpp

#include "print.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
    print();
    return 0;
}

六、bazel编译成动态库(.so文件)

1)文件目录

WORKSPACE
lib
    BUILD
    print.h
    print.cpp

(2)文件内容

lib

BUILD

cc_library(
        name="libprint.so",
        srcs=["print.h","print.cpp"],
        linkshared=True
)

print.h

#include<stdio.h>
void print(void);

print.cpp

#include "print.h"
void print() {
    printf("hello world\n");
}

(3)编译命令

bazel build //main:libprint.so

生成动态库 libprint.so

七、bazel编译调用动态库(.so文件)

(1)文件目录

WORKSPACE
main
    BUILD
    print.h
    libprint.so
    demo.cpp

(2)文件内容

main

BUILD

cc_import(
        name="print",
        hdrs=["print.h"],
        shared_library="libprint.so"
)
cc_binary(
        name="demo",
        srcs=["demo.cpp"],
        deps=[":print"]
)

print.h

#include<stdio.h>
void print(void);

demo.cpp

#include "print.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
    print();
    return 0;
}

(3)编译命令

bazel build //main:demo

到了这里,关于bazel编译C++的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js预编译(全局预编译/函数预编译)

    预编译是上下文创建之后, js代码执行前的一段时期, 在这个时期, 会对js代码进行预处理。 全局上下文创建后,会生成变量对象VO:var变量-》函数-》同名函数覆盖变量名 VO首先寻找变量声明,将var声明的变量作为VO对象的属性名,值为undefined。 然后寻找函数声明,属性值为

    2024年02月07日
    浏览(46)
  • 编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)

    在ANSI C的任何一种实现中,存在两个不同的环境。​ 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。​ 第2种是执行环境,它用于实际执行代码。​ VS中编译器:cl.exe ;Linux中目标文件后缀.o  Windows中目标文件.obj  ,链接器 link.exe 那翻译环境是怎么将源

    2024年01月23日
    浏览(46)
  • 微信小程序编译bug---Hbuilderx编译时一直卡在编译界面

    使用Hbuilderx开发微信小程序,正常开发中,在某次重新保存代码并编译后一直卡在编译界面; 如图(图为Hbuilderx界面) 因为此时没有编译完成,所以微信开发者工具界面一片空白,报错为:app.json: app.json 未找到 原因分析1:电脑有bug,遇事不决先重启; 举措:重启HbuilderX;

    2024年01月17日
    浏览(50)
  • 迅为RK3588开发板编译 Buildroot单独编译图形化界面(编译 buildroot)

    第四步:编译 buildroot 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面,进入之后如下所示: ./build.sh 然后将光标移动到第三个 rootfs,点击回车会进入到文件系统镜像选择界面,如下图所示: 这里总共有五种镜像供编译选择,由于本小节要编译的是 buildroot,所以将光

    2024年01月20日
    浏览(45)
  • gcc编译 与交叉编译(x86 to arm) (一)单个文件编译

    源平台: UOS_X86_64 目标平台:UOS_arm 方法:使用现成的交叉编译工具链 参考资料:交叉编译概念 ; 安装交叉编译器 ; 交叉编译入门 ( 步骤1 )去平台下载对应的工具链 https://www.linaro.org/downloads/ https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads 以上两个均可以下载,我下载

    2024年02月06日
    浏览(51)
  • 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)

    编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。 目录 一、单模块编译 1、一个 c 文件编译成一个 ko 文件 2、多个文件编译成一个 ko 文件 二、多模块编译(多文件多模块) 下面是最简易的单文件单模块编译,假设我们

    2024年02月10日
    浏览(68)
  • 编译opencv-3.4.5 [交叉编译]

    在unbuntu20.04环境下编译opencv3.4.5, cmake 版本:3.27.4 gcc 版本:11.4.0 g++版本:11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 (1) Built target libprotobuf make: *** [Makefile:163:all] 错误 2 make时用suod:     sudo make -j4 (2) [ 30%] Linking CXX static library ../../lib/libopencv_core.a [ 30

    2024年02月07日
    浏览(39)
  • OpenHarmonyllvm交叉编译工具链编译介绍

    1.1 工具链下载 1.2 环境配置 下载 clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz 为 github 网址,当前已经下载了,可以直接使用 1.3 安装依赖 1.3.1 基础组件安装 1.4 工具链编译 1.4.1 clang15.0.4 版本全量编译 1.4.2 clang15.0.4 版本不编译 windows 平台 1.4.3 clang12.0.1 版本全量编译 【Note】 :该

    2024年01月25日
    浏览(39)
  • 跨平台编译go(交叉编译)

    以将一个简单的go http 部署到docker为例! Dockerfile文件 docker build . -t goweb_app docker run -p 8888:8888 goweb_app 在最终的镜像中是不需要go编译器的,也就是说只需要一个运行最终二进制文件的容器即可。 Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。 golang中跨平台

    2024年02月07日
    浏览(86)
  • 【C语言】--编译及编译器

    夫学须静也,才须学也;非学无以广才,非志无以成学 个人主页:【😊个人主页】 系列专栏:【❤️系列专栏】 C语言一直以来都是初入编程的小白们的必修课,作为程序员必学语言之一,C语言自然有属于它的奥秘,接下来就由我来带领大家走进C语言的世界吧🚗🚗🚗 1、

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包