카테고리 없음

Bazel c++ 일반적인 C++ 빌드 사용사례_glob()

comwitch 2023. 7. 6. 01:03

앞서서 Bazel 프로젝트의 디렉토리 구성에 대해서 간단하게 알아보았다.

 

이제는 bazel의 일반적인 c++ 빌드 사용 사례 파트를 보면서 한번 분석해볼 예정이다.

 

https://bazel.build/tutorials/cpp-use-cases?hl=ko 

 

일반적인 C++ 빌드 사용 사례  |  Bazel

날짜 비워 두기: BazelCon 2023이 10월 24~25일에 Google 뮌헨에서 열립니다. 자세히 알아보기 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 일반적인 C++ 빌드 사용 사례 컬렉션을

bazel.build

위의 내용에 대해서 조금 해설을 약간 덧붙이자면

 

glob을 사용해서 단일 대상에 여러 파일을 포함 할 수 있다고 한다.

말 그대로 library로 사용할 대상에 glob 문법을 통해서 좀 더 편하게 사용할 수 있다는 뜻이다. 

예를 들어 나온 파트를 보면, 

cc_library(
    name = "build-all-the-files",
    srcs = glob(["*.cc"]),
    hdrs = glob(["*.h"]),
)

source와 hdrs를 glob() 함수를 사용해서 cc파일과 .h 파일을 빌드하라는 내용이다.

library에 hello-bye, hello-nice와 hello-time이 존재한다. 이를 라이브러리파일로 사용하기 위해 빌드를 하려면 BUILD파일을 다음과 같이 작성하면 된다. Bazel은 해당 디렉토리 안의 모든 h와 cc파일을 빌드시킨다.

load("@rules_cc//cc:defs.bzl", "cc_library")

cc_library(
    name = "hello-time",
    srcs = glob(["*.cc"]),
    hdrs = glob(["*.h"]),
    visibility = ["//main:__pkg__"],
)

그러면 main 폴더에 들어가서 BUILD파일을 보자.

load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")

cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    deps = [
        ":hello-greet",
        "//lib:hello-time",
    ],
)

그러면 hello-time,  lib를 가져와서 쓰는 것을 볼 수있다.

바이너리 소 파일인 hello-world.cc를 보면 

다음과 같이 세 함수를 쓴다음 빌드 후 실행결과를 보면 다음과 같이 모두 사용되는 것을 볼 수 있.

 

 

glob 함수의 규칙은 다음 url에서 볼 수 있다.

https://bazel.build/reference/be/functions?hl=ko#glob 

 

함수  |  Bazel

날짜 비워 두기: BazelCon 2023이 10월 24~25일에 Google 뮌헨에서 열립니다. 자세히 알아보기 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 함수 컬렉션을 사용해 정리하기 내 환

bazel.build