BazelCon 2022는 11월 16~17일에 뉴욕과 온라인에서 개최됩니다.
지금 등록하기

C / C++ 규칙

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

규칙

cc_binary

cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)

암시적 출력 타겟

  • name.stripped(명시적으로 요청된 경우에만 빌드됨): 바이너리의 제거된 버전입니다. strip -g는 바이너리에서 실행되어 디버그 기호를 삭제합니다. 명령줄에서 --stripopt=-foo를 사용하여 추가 스트립 옵션을 제공할 수 있습니다. 이 출력은 명시적으로 요청되는 경우에만 빌드됩니다.
  • name.dwp (명시적으로 요청된 경우에만 빌드됨): Fission이 사용 설정된 경우: 원격으로 배포된 바이너리 디버깅에 적합한 디버그 정보 패키지 파일입니다. 그 외의 경우에는 빈 파일이 필요합니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

바이너리 대상에 연결할 다른 라이브러리의 목록입니다.

cc_library 또는 objc_library 타겟일 수 있습니다.

srcs

List of labels; optional

대상을 생성하기 위해 처리되는 C 및 C++ 파일의 목록입니다. 이러한 파일은 생성되지 않은 (일반 소스 코드) 또는 생성된 C/C++ 소스 및 헤더 파일입니다.

모든 .cc, .c, .cpp 파일이 컴파일됩니다. 생성된 파일일 수 있습니다. 이름이 지정된 파일이 다른 규칙의 outs에 있으면 이 규칙이 다른 규칙에 자동으로 종속됩니다.

.h 파일은 컴파일되지 않지만 이 규칙의 소스에서 포함할 수 있습니다. .cc.h 파일은 모두 이 srcs 또는 deps 인수에 나열된 규칙의 hdrs에 나열된 헤더를 직접 포함할 수 있습니다.

모든 #included 파일은 이 규칙의 srcs 속성 또는 참조된 cc_library()hdrs 속성에 언급되어야 합니다. 라이브러리에 연결된 헤더를 라이브러리의 hdrs 속성에 나열하고 이 규칙과 연결된 나머지 소스는 srcs에 나열하는 것이 좋습니다. 자세한 설명은 "헤더 포함 확인"을 참조하세요.

규칙의 이름이 srcs에 있으면 이 규칙이 자동으로 적용됩니다. 이름이 지정된 규칙의 outs가 C 또는 C++ 소스 파일인 경우 이 규칙으로 컴파일되며 라이브러리 파일인 경우 연결됩니다.

허용되는 srcs 파일 형식은 다음과 같습니다.

  • C 및 C++ 소스 파일: .c, .cc, .cpp, .cxx, .c++, .C
  • C 및 C++ 헤더 파일: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C 전처리기를 사용한 어셈블러: .S
  • 보관 파일: .a, .pic.a
  • "항상 연결" 라이브러리: .lo, .pic.lo
  • 버전이 지정되거나 버전이 지정되지 않은 공유 라이브러리: .so, .so.version
  • 객체 파일: .o, .pic.o

이러한 파일을 생성하는 규칙을 모두 만듭니다. 다양한 확장자가 GCC 규칙에 따라 다른 프로그래밍 언어를 나타냅니다.

additional_linker_inputs

List of labels; optional

이러한 파일을 C++ 링커 명령어에 전달합니다.

예를 들어, 컴파일된 Windows .res 파일을 바이너리 대상에 삽입하도록 여기에 제공할 수 있습니다.

copts

List of strings; optional

C++ 컴파일 명령어에 이러한 옵션을 추가합니다. "Make var" 대체 및 Bourne 셸 토큰화가 적용됩니다.

이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서로 COPTS에 추가됩니다. 플래그는 이 종속 항목을 컴파일하는 경우에만 적용되며 종속 항목이 아닌 경우에만 적용되므로 다른 위치에 포함된 헤더 파일에는 주의해야 합니다. 모든 경로는 현재 패키지가 아닌 작업공간을 기준으로 해야 합니다.

패키지에서 기능 no_copts_tokenization을 선언하는 경우, Bourne 셸 토큰화는 단일 "Make" 변수로 구성된 문자열에만 적용됩니다.

defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며 컴파일 명령줄에 이 타겟과 이를 사용하는 모든 규칙에 추가됩니다. 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러운 경우 대신 local_defines에 정의 값을 추가하세요.
includes

List of strings; optional

컴파일 라인에 추가할 dir의 목록입니다.

"Makevariable" 대체가 적용됩니다. 각 문자열 앞에는 -isystem가 붙고 COPTS에 추가됩니다. COPTS와 달리 이러한 플래그는 이 규칙과 규칙을 사용하는 모든 규칙에 추가됩니다. (참고: 규칙이 적용되는 것은 아닙니다.) 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러우면 COPTS에 "-I" 플래그를 추가하세요.

헤더는 src 또는 hdr에 추가해야 하며, 그러지 않으면 컴파일이 샌드박스 처리 (기본값)될 때 종속 규칙에 사용할 수 없습니다.

linkopts

List of strings; optional

C++ 링커 명령어에 이러한 플래그를 추가합니다. "Make" 변수 대체에 따라 Bourne 셸 토큰화라벨 확장이 적용됩니다. 이 속성의 각 문자열은 바이너리 타겟을 연결하기 전에 LINKOPTS에 추가됩니다.

$ 또는 -로 시작하지 않는 이 목록의 각 요소는 deps의 타겟 라벨로 간주됩니다. 이 타겟에서 생성된 파일 목록은 링커 옵션에 추가됩니다. 라벨이 잘못되었거나 deps에 선언되지 않으면 오류가 보고됩니다.

linkshared

Boolean; optional; nonconfigurable; default is False

공유 라이브러리를 만듭니다. 이 속성을 사용 설정하려면 규칙에 linkshared=True를 포함합니다. 이 옵션은 기본적으로 사용 중지되어 있습니다.

이 플래그가 있으면 -shared 플래그와 함께 gcc로의 연결이 진행되고, 결과 공유 라이브러리가 예를 들어 자바 프로그램에 로드하기에 적합합니다. 그러나 빌드 목적을 위해 cc_binary 규칙으로 빌드된 공유 라이브러리는 다른 프로그램에 의해 수동으로 로드되므로 cc_library 규칙의 대체로 고려되지 않으므로 종속 바이너리에 연결되지 않습니다. 확장성을 위해 이 접근 방식을 완전히 피하고 java_library이 대신 cc_library 규칙에 종속되도록 하는 것이 좋습니다.

linkopts=['-static']linkshared=True을 모두 지정하면 완전히 포함된 단일 단위가 생성됩니다. linkstatic=1linkshared=True을 모두 지정하면 대부분 포함된 단일 단위가 생성됩니다.

linkstatic

Boolean; optional; default is True

cc_binarycc_test의 경우: 바이너리 모드에서 바이너리를 연결합니다. cc_library.linkstatic의 경우 아래를 참고하세요.

기본적으로 이 옵션은 cc_binary에 사용 설정되어 있고 나머지에는 사용 중지되어 있습니다.

사용 설정되고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 사용자 라이브러리에 대해 .a's 대신 .so's로 연결하도록 빌드 도구에 알립니다. 정적 라이브러리가 없는 라이브러리와 마찬가지로 일부 시스템 라이브러리는 계속 동적으로 링크될 수 있습니다. 따라서 결과 실행 파일은 여전히 동적으로 연결되므로 대부분 정적만 유지됩니다.

실행 파일을 연결하는 방법에는 세 가지가 있습니다.

  • static_static 특징과 함께 STATIC.모든 항목이 정적으로 연결됩니다. 예: "gcc -static foo.o libbar.a libbaz.a -lm".
    이 모드는 features 속성에서 fully_static_link를 지정하여 사용 설정합니다.
  • 정적인 경우 모든 사용자 라이브러리가 정적으로 연결되어 있지만(정적 버전을 사용할 수 있는 경우), 시스템 라이브러리(예: C/C++ 런타임 라이브러리 제외)가 동적으로 연결된 경우(예: "gcc foo.o libfoo.a libbaz.a -lm").
    이 모드를 사용 설정하면 linkstatic=True이 지정됩니다.
  • 동적인 경우 모든 라이브러리가 동적으로 연결되는 동적인(예: 동적인 경우)(예: 'gcc foo.o libfoo.so libbaz.so -lm'.
    ). 이 모드는 linkstatic=False을 지정하여 사용 설정됩니다.

cc_library() 규칙에 사용될 경우 linkstatic 속성의 의미가 다릅니다. C++ 라이브러리의 경우 linkstatic=True는 정적 연결만 허용되므로 .so이 생성되지 않음을 나타냅니다. linkstatic=False는 정적 라이브러리 생성이 차단되지 않습니다. 이 속성은 동적 라이브러리 생성을 제어하기 위한 것입니다.

linkstatic=False이면 빌드 도구가 *.runfiles 영역에서 종속된 공유 라이브러리에 대한 심볼릭 링크를 만듭니다.

local_defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며, 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

malloc의 기본 종속 항목을 재정의합니다.

기본적으로 C++ 바이너리는 빈 라이브러리인 //tools/cpp:malloc에 연결되므로 바이너리는 libc malloc을 사용하여 끝납니다. 이 라벨은 cc_library를 참조해야 합니다. 비 C++ 규칙의 컴파일인 경우 이 옵션은 적용되지 않습니다. 이 속성 값은 linkshared=True을 지정하면 무시됩니다.

nocopts

String; optional

C++ 컴파일 명령어에서 일치하는 옵션을 삭제합니다. "Make" 변수 대체가 적용됩니다. 이 속성 값은 정규 표현식으로 해석됩니다. 이 정규 표현식과 일치하는 모든 기존 COPTS(규칙의 copts 속성에 명시적으로 지정된 값 포함)이 이 규칙을 컴파일하려는 목적으로 COPTS에서 삭제됩니다. 이 속성은 거의 필요하지 않습니다.
stamp

Integer; optional; default is -1

빌드 정보를 바이너리에 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다.
  • stamp = 1: --nostamp 빌드의 경우에도 항상 빌드 정보에 바이너리를 스탬프합니다. 이 설정은 피해야 합니다. 바이너리의 원격 캐싱과 이에 종속되는 모든 다운스트림 작업이 종료될 수 있기 때문입니다.
  • stamp = 0: 항상 빌드 정보를 상수 값으로 바꿉니다. 이렇게 하면 우수한 빌드 결과 캐싱이 가능합니다.
  • stamp = -1: 빌드 정보 삽입은 --[no]stamp 플래그에 의해 제어됩니다.

스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다.

win_def_file

Label; optional

링커에 전달할 Windows DEF 파일입니다.

이 속성은 Windows가 타겟 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다.

cc_import

cc_import(name, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)

cc_import 규칙을 사용하면 사용자가 사전 컴파일된 C/C++ 라이브러리를 가져올 수 있습니다.

다음은 일반적인 사용 사례입니다.
1. 정적 라이브러리 연결

cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  # If alwayslink is turned on,
  # libmylib.a will be forcely linked into any binary that depends on it.
  # alwayslink = 1,
)
2. 공유 라이브러리 (Unix) 연결
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
3. 인터페이스 라이브러리에 공유 라이브러리 연결
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is a import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll will be available for runtime
  shared_library = "mylib.dll",
)
4. 공유 라이브러리를 system_provided=True(Windows)와 연결
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll is provided by system environment, for example it can be found in PATH.
  # This indicates that Bazel is not responsible for making mylib.dll available.
  system_provided = 1,
)
5. 정적 또는 공유 라이브러리에 연결
Unix:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  shared_library = "libmylib.so",
)

# first will link to libmylib.a
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to libmylib.so
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)
Windows:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.lib", # A normal static library
  interface_library = "mylib.lib", # An import library for mylib.dll
  shared_library = "mylib.dll",
)

# first will link to libmylib.lib
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)

# second will link to mylib.dll through mylib.lib
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

hdrs

List of labels; optional

종속 규칙의 소스에 직접 포함되도록 이 사전 컴파일된 라이브러리에서 게시한 헤더 파일 목록입니다.

Boolean; optional; default is False

1인 경우 이 C++ 사전 컴파일된 라이브러리에 종속되는 모든 바이너리 (직접 또는 간접적으로)는 바이너리 라이브러리에 의해 참조되는 기호가 없더라도 정적 라이브러리에 보관처리된 모든 객체 파일에 연결됩니다. 이는 코드가 바이너리의 코드에서 명시적으로 호출되지 않는 경우에 유용합니다(예: 일부 서비스에서 제공한 콜백을 수신하기 위해 코드를 등록하는 경우).

알려진 문제로 인해 Windows에서 항상 VS 2017을 사용할 수 없다면 VS 2017을 최신 버전으로 업그레이드하세요.

interface_library

Label; optional

공유 라이브러리 연결을 위한 단일 인터페이스 라이브러리

허용되는 파일 형식: .ifso, .tbd, .lib, .so 또는 .dylib

shared_library

Label; optional

사전 컴파일된 단일 공유 라이브러리 Bazel은 런타임 시 종속 항목을 사용하는 바이너리에서 사용할 수 있도록 보장합니다.

허용되는 파일 형식: .so, .dll 또는 .dylib

static_library

Label; optional

사전 컴파일된 단일 정적 라이브러리

허용되는 파일 형식: .a, .pic.a 또는 .lib

system_provided

Boolean; optional; default is False

1인 경우 시스템에서 필요한 공유 라이브러리가 시스템에서 제공함을 나타냅니다. 이 경우 interface_library을 지정해야 하며 shared_library는 비워 두어야 합니다.

cc_library

cc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, include_prefix, includes, interface_deps, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)

헤더 포함 확인

빌드에 사용되는 모든 헤더 파일은 cc_* 규칙의 hdrs 또는 srcs에 선언해야 합니다. 이는 시행되고 있습니다.

cc_library 규칙의 경우 hdrs의 헤더는 라이브러리의 공개 인터페이스를 구성하며, 라이브러리 자체의 hdrssrcs의 파일과 deps의 라이브러리를 나열하는 cc_* 규칙의 hdrssrcs의 파일 모두에 직접 포함할 수 있습니다. srcs의 헤더는 라이브러리 자체의 hdrssrcs 파일에서만 직접 포함되어야 합니다. 헤더를 hdrs에 배치할지 또는 srcs에 배치할지 결정할 때는 이 라이브러리의 소비자에게 헤더를 직접 포함할 수 있는지 확인해야 합니다. 이는 프로그래밍 언어의 publicprivate 표시 여부와 거의 동일한 결정입니다.

cc_binarycc_test 규칙에는 내보낸 인터페이스가 없으므로 hdrs 속성도 없습니다. 바이너리 또는 테스트에 직접 속한 모든 헤더는 srcs에 나열되어야 합니다.

이러한 규칙을 보여주기 위해 다음 예시를 살펴보세요.

cc_binary(
    name = "foo",
    srcs = [
        "foo.cc",
        "foo.h",
    ],
    deps = [":bar"],
)

cc_library(
    name = "bar",
    srcs = [
        "bar.cc",
        "bar-impl.h",
    ],
    hdrs = ["bar.h"],
    deps = [":baz"],
)

cc_library(
    name = "baz",
    srcs = [
        "baz.cc",
        "baz-impl.h",
    ],
    hdrs = ["baz.h"],
)

이 예에서 허용되는 직접 포함은 아래 표에 나와 있습니다. 예를 들어 foo.ccfoo.hbar.h를 직접 포함할 수 있지만 baz.h는 포함할 수 없습니다.

파일 포함허용된 포함
foo.h
foo.ccfoo.h bar.h
bar-impl.h baz.h
Bar-impl.hBar.h baz.h
바.ccbar.h bar-impl.h baz.h
baz.hbaz-impl.h
baz-impl.hbaz.h
baz.ccbaz.h baz-impl.h

포함 확인 규칙은 직접 포함에만 적용됩니다. 위 예에서 foo.ccbar.h를 포함할 수 있으며 여기에는 baz.h가 포함될 수 있으며 결과적으로 baz-impl.h를 포함할 수 있습니다. 기술적으로 .cc 파일의 컴파일에는 hdrs 또는 hdrs의 모든 헤더 파일이 전이 deps 클로저의 cc_library에 전이적으로 포함될 수 있습니다. 이 경우 컴파일러가 foo.cc를 컴파일할 때 baz.hbaz-impl.h을 읽을 수 있지만 foo.cc#include "baz.h"를 포함해서는 안 됩니다. 이렇게 하려면 bazfoodeps에 추가해야 합니다.

죄송하지만 현재 Bazel은 직접 포함과 전이 포함을 구분할 수 없습니다. 따라서 전이적으로만 허용되는 헤더만 불법적으로 포함하는 오류 사례는 감지할 수 없습니다. 예를 들어 위의 예의 foo.ccbaz.h이 직접 포함되어 있으면 Bazel은 불평하지 않습니다. foobaz에 직접 종속되지 않으므로 이는 불법입니다. 현재는 오류가 발생하지 않지만 향후에 오류 검사가 추가될 수 있습니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

바이너리 대상에 연결할 다른 라이브러리의 목록입니다.

cc_library 또는 objc_library 타겟일 수 있습니다.

srcs

List of labels; optional

대상을 생성하기 위해 처리되는 C 및 C++ 파일의 목록입니다. 이러한 파일은 생성되지 않은 (일반 소스 코드) 또는 생성된 C/C++ 소스 및 헤더 파일입니다.

모든 .cc, .c, .cpp 파일이 컴파일됩니다. 생성된 파일일 수 있습니다. 이름이 지정된 파일이 다른 규칙의 outs에 있으면 이 규칙이 다른 규칙에 자동으로 종속됩니다.

.h 파일은 컴파일되지 않지만 이 규칙의 소스에서 포함할 수 있습니다. .cc.h 파일은 모두 이 srcs 또는 deps 인수에 나열된 규칙의 hdrs에 나열된 헤더를 직접 포함할 수 있습니다.

모든 #included 파일은 이 규칙의 srcs 속성 또는 참조된 cc_library()hdrs 속성에 언급되어야 합니다. 라이브러리에 연결된 헤더를 라이브러리의 hdrs 속성에 나열하고 이 규칙과 연결된 나머지 소스는 srcs에 나열하는 것이 좋습니다. 자세한 설명은 "헤더 포함 확인"을 참조하세요.

규칙의 이름이 srcs에 있으면 이 규칙이 자동으로 적용됩니다. 이름이 지정된 규칙의 outs가 C 또는 C++ 소스 파일인 경우 이 규칙으로 컴파일되며 라이브러리 파일인 경우 연결됩니다.

허용되는 srcs 파일 형식은 다음과 같습니다.

  • C 및 C++ 소스 파일: .c, .cc, .cpp, .cxx, .c++, .C
  • C 및 C++ 헤더 파일: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C 전처리기를 사용한 어셈블러: .S
  • 보관 파일: .a, .pic.a
  • "항상 연결" 라이브러리: .lo, .pic.lo
  • 버전이 지정되거나 버전이 지정되지 않은 공유 라이브러리: .so, .so.version
  • 객체 파일: .o, .pic.o

이러한 파일을 생성하는 규칙을 모두 만듭니다. 다양한 확장자가 GCC 규칙에 따라 다른 프로그래밍 언어를 나타냅니다.

hdrs

List of labels; optional

이 라이브러리에서 게시한 헤더 파일 목록으로, 종속 규칙의 소스에 직접 포함됩니다.

라이브러리의 인터페이스를 설명하는 헤더 파일을 선언할 때 특히 권장되는 위치입니다. 이 헤더는 이 규칙 또는 종속 규칙의 소스에 포함할 수 있습니다. 이 라이브러리의 클라이언트에 포함되지 않아야 하는 헤더는 게시된 헤더에 포함된 경우에도 srcs 속성에 나열해야 합니다. 자세한 설명은 "헤더 포함 여부 확인"을 참조하세요.

Boolean; optional; default is False

1이면 이 C++ 라이브러리에서 직간접적으로 종속되는 모든 바이너리는 srcs에 나열된 파일의 모든 객체 파일에서 연결됩니다. 이는 바이너리에 의해 참조되는 기호가 없더라도 마찬가지입니다. 이는 코드가 바이너리의 코드에서 명시적으로 호출되지 않는 경우에 유용합니다(예: 일부 서비스에서 제공한 콜백을 수신하기 위해 코드를 등록하는 경우).

알려진 문제로 인해 Windows에서 항상 VS 2017을 사용할 수 없다면 VS 2017을 최신 버전으로 업그레이드하세요.

copts

List of strings; optional

C++ 컴파일 명령어에 이러한 옵션을 추가합니다. "Make var" 대체 및 Bourne 셸 토큰화가 적용됩니다.

이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서로 COPTS에 추가됩니다. 플래그는 이 종속 항목을 컴파일하는 경우에만 적용되며 종속 항목이 아닌 경우에만 적용되므로 다른 위치에 포함된 헤더 파일에는 주의해야 합니다. 모든 경로는 현재 패키지가 아닌 작업공간을 기준으로 해야 합니다.

패키지에서 기능 no_copts_tokenization을 선언하는 경우, Bourne 셸 토큰화는 단일 "Make" 변수로 구성된 문자열에만 적용됩니다.

defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며 컴파일 명령줄에 이 타겟과 이를 사용하는 모든 규칙에 추가됩니다. 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러운 경우 대신 local_defines에 정의 값을 추가하세요.
include_prefix

String; optional

이 규칙 헤더의 경로에 추가할 프리픽스입니다.

설정되면 이 규칙의 hdrs 속성에 있는 헤더에 액세스할 수 있습니다. 이 속성의 값은 저장소 상대 경로 앞에 추가됩니다.

strip_include_prefix 속성의 접두사는 이 접두사가 추가되기 전에 삭제됩니다.

includes

List of strings; optional

컴파일 라인에 추가할 dir의 목록입니다.

"Makevariable" 대체가 적용됩니다. 각 문자열 앞에는 -isystem가 붙고 COPTS에 추가됩니다. COPTS와 달리 이러한 플래그는 이 규칙과 규칙을 사용하는 모든 규칙에 추가됩니다. (참고: 규칙이 적용되는 것은 아닙니다.) 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러우면 COPTS에 "-I" 플래그를 추가하세요.

헤더는 src 또는 hdr에 추가해야 하며, 그러지 않으면 컴파일이 샌드박스 처리 (기본값)될 때 종속 규칙에 사용할 수 없습니다.

interface_deps

List of labels; optional

--experimental_cc_interface_deps가 True인 경우 deps에 나열된 타겟이 구현 pss처럼 동작합니다. 일반 deps와 달리, 헤더와 구현 deps (및 모든 전이 deps)의 경로는 이 라이브러리의 컴파일에만 사용되며 종속 라이브러리를 포함하는 라이브러리는 사용되지 않습니다. 라이브러리는 이 라이브러리에 종속된 바이너리 대상에 계속 링크되므로 구현 종속 항목이 의존합니다. Interface_deps에 나열된 종속 항목은 헤더 및 포함 경로가 다운스트림으로 전파되는 이전 ps와 동일한 동작을 계속 합니다.
linkopts

List of strings; optional

C++ 링커 명령어에 이러한 플래그를 추가합니다. "Make" 변수 대체에 따라 Bourne 셸 토큰화라벨 확장이 적용됩니다. 이 속성의 각 문자열은 바이너리 타겟을 연결하기 전에 LINKOPTS에 추가됩니다.

$ 또는 -로 시작하지 않는 이 목록의 각 요소는 deps의 타겟 라벨로 간주됩니다. 이 타겟에서 생성된 파일 목록은 링커 옵션에 추가됩니다. 라벨이 잘못되었거나 deps에 선언되지 않으면 오류가 보고됩니다.

linkstamp

Label; optional

지정된 C++ 소스 파일을 동시에 컴파일하고 최종 바이너리에 연결합니다. 이 트릭은 바이너리 정보를 바이너리에 도입하기 위해 필요합니다. 일반적인 방식으로 소스 파일을 객체 파일에 컴파일한 경우 타임스탬프가 부정확합니다. 링크 스탬프 컴파일은 특정 컴파일러 플래그 세트를 포함할 수 없으므로 특정 헤더, 컴파일러 옵션, 기타 빌드 변수에 종속되면 안 됩니다. 이 옵션은 base 패키지에서만 필요합니다.
linkstatic

Boolean; optional; default is False

cc_binarycc_test의 경우: 바이너리 모드에서 바이너리를 연결합니다. cc_library.linkstatic의 경우 아래를 참고하세요.

기본적으로 이 옵션은 cc_binary에 사용 설정되어 있고 나머지에는 사용 중지되어 있습니다.

사용 설정되고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 사용자 라이브러리에 대해 .a's 대신 .so's로 연결하도록 빌드 도구에 알립니다. 정적 라이브러리가 없는 라이브러리와 마찬가지로 일부 시스템 라이브러리는 계속 동적으로 링크될 수 있습니다. 따라서 결과 실행 파일은 여전히 동적으로 연결되므로 대부분 정적만 유지됩니다.

실행 파일을 연결하는 방법에는 세 가지가 있습니다.

  • static_static 특징과 함께 STATIC.모든 항목이 정적으로 연결됩니다. 예: "gcc -static foo.o libbar.a libbaz.a -lm".
    이 모드는 features 속성에서 fully_static_link를 지정하여 사용 설정합니다.
  • 정적인 경우 모든 사용자 라이브러리가 정적으로 연결되어 있지만(정적 버전을 사용할 수 있는 경우), 시스템 라이브러리(예: C/C++ 런타임 라이브러리 제외)가 동적으로 연결된 경우(예: "gcc foo.o libfoo.a libbaz.a -lm").
    이 모드를 사용 설정하면 linkstatic=True이 지정됩니다.
  • 동적인 경우 모든 라이브러리가 동적으로 연결되는 동적인(예: 동적인 경우)(예: 'gcc foo.o libfoo.so libbaz.so -lm'.
    ). 이 모드는 linkstatic=False을 지정하여 사용 설정됩니다.

cc_library() 규칙에 사용될 경우 linkstatic 속성의 의미가 다릅니다. C++ 라이브러리의 경우 linkstatic=True는 정적 연결만 허용되므로 .so이 생성되지 않음을 나타냅니다. linkstatic=False는 정적 라이브러리 생성이 차단되지 않습니다. 이 속성은 동적 라이브러리 생성을 제어하기 위한 것입니다.

linkstatic=False이면 빌드 도구가 *.runfiles 영역에서 종속된 공유 라이브러리에 대한 심볼릭 링크를 만듭니다.

local_defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며, 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
nocopts

String; optional

C++ 컴파일 명령어에서 일치하는 옵션을 삭제합니다. "Make" 변수 대체가 적용됩니다. 이 속성 값은 정규 표현식으로 해석됩니다. 이 정규 표현식과 일치하는 모든 기존 COPTS(규칙의 copts 속성에 명시적으로 지정된 값 포함)이 이 규칙을 컴파일하려는 목적으로 COPTS에서 삭제됩니다. 이 속성은 거의 필요하지 않습니다.
strip_include_prefix

String; optional

이 규칙 헤더의 경로에서 제거할 프리픽스입니다.

이 규칙을 설정하면 이 규칙의 hdrs 속성에 있는 헤더에 이 프리픽스가 잘린 상태로 액세스할 수 있습니다.

상대 경로인 경우 패키지 상대 경로로 사용됩니다. 이 디렉터리가 절대 경로라면 저장소를 기준으로 하는 경로로 간주됩니다.

include_prefix 속성의 접두어는 이 접두어가 삭제된 후에 추가됩니다.

textual_hdrs

List of labels; optional

이 라이브러리에서 게시한 헤더 파일 목록으로, 종속 규칙의 소스에 텍스트라고 포함되어 있습니다.

자체적으로 컴파일할 수 없는 헤더 파일을 선언할 위치입니다. 즉, 유효한 코드를 빌드하기 위해 다른 소스 파일에서 항상 텍스트 파일을 포함해야 합니다.

win_def_file

Label; optional

링커에 전달할 Windows DEF 파일입니다.

이 속성은 Windows가 타겟 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다.

cc_proto_library

cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

cc_proto_library.proto 파일에서 C++ 코드를 생성합니다.

deps은(는) proto_library 규칙을 가리켜야 합니다.

예:

cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

C++ 코드를 생성할 proto_library 규칙의 목록입니다.

fdo_prefetch_hints

fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)

작업공간 또는 지정된 절대 경로에 있는 FDO 미리 가져오기 힌트 프로필을 나타냅니다. 예:

fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)

fdo_profile(
  name = "hints_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

profile

Label; optional

힌트 프로필의 라벨입니다. 힌트 파일에는 .afdo 확장자가 있습니다. 라벨은 fdo_absolute_path_profile 규칙을 가리킬 수도 있습니다.

fdo_profile[fdo_profile]

fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)

작업공간 또는 지정된 절대 경로에 있는 FDO 프로필을 나타냅니다. 예:

fdo_profile(
    name = "fdo",
    profile = "//path/to/fdo:profile.zip",
)

fdo_profile(
  name = "fdo_abs",
  absolute_path_profile = "/absolute/path/profile.zip",
)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

absolute_path_profile

String; optional

FDO 프로필의 절대 경로입니다. FDO 파일에는 .afdo 확장자만 사용할 수 있습니다.
profile

Label; optional

FDO 프로필의 라벨. FDO 파일에는 확장자가 없는 LLVM 프로필의 경우 .profraw, 색인이 생성된 LLVM 프로필의 경우 .profdata, LLVM 프로파일 프로필을 포함하는 .zip, AutoFDO 프로필의 경우 .afdo, XBinary 프로필의 .xfdo 확장자 중 하나가 있을 수 있습니다. 라벨이 fdo_absolute_path_profile 규칙을 가리킬 수도 있습니다.
proto_profile

Label; optional

protobuf 프로필의 라벨입니다.

propeller_optimize

propeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

작업공간의 프로펠러 최적화 프로필을 나타냅니다. 예:

propeller_optimize(
    name = "layout",
    cc_profile = "//path:cc_profile.txt",
    ld_profile = "//path:ld_profile.txt"
)

propeller_optimize(
    name = "layout_absolute",
    absolute_cc_profile = "/absolute/cc_profile.txt",
    absolute_ld_profile = "/absolute/ld_profile.txt"
)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

ld_profile

Label; optional

연결 작업에 전달된 프로필의 라벨입니다. 이 파일에는 .txt 확장자가 있습니다.

cc_test

cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

deps

List of labels; optional

바이너리 대상에 연결할 다른 라이브러리의 목록입니다.

cc_library 또는 objc_library 타겟일 수 있습니다.

srcs

List of labels; optional

대상을 생성하기 위해 처리되는 C 및 C++ 파일의 목록입니다. 이러한 파일은 생성되지 않은 (일반 소스 코드) 또는 생성된 C/C++ 소스 및 헤더 파일입니다.

모든 .cc, .c, .cpp 파일이 컴파일됩니다. 생성된 파일일 수 있습니다. 이름이 지정된 파일이 다른 규칙의 outs에 있으면 이 규칙이 다른 규칙에 자동으로 종속됩니다.

.h 파일은 컴파일되지 않지만 이 규칙의 소스에서 포함할 수 있습니다. .cc.h 파일은 모두 이 srcs 또는 deps 인수에 나열된 규칙의 hdrs에 나열된 헤더를 직접 포함할 수 있습니다.

모든 #included 파일은 이 규칙의 srcs 속성 또는 참조된 cc_library()hdrs 속성에 언급되어야 합니다. 라이브러리에 연결된 헤더를 라이브러리의 hdrs 속성에 나열하고 이 규칙과 연결된 나머지 소스는 srcs에 나열하는 것이 좋습니다. 자세한 설명은 "헤더 포함 확인"을 참조하세요.

규칙의 이름이 srcs에 있으면 이 규칙이 자동으로 적용됩니다. 이름이 지정된 규칙의 outs가 C 또는 C++ 소스 파일인 경우 이 규칙으로 컴파일되며 라이브러리 파일인 경우 연결됩니다.

허용되는 srcs 파일 형식은 다음과 같습니다.

  • C 및 C++ 소스 파일: .c, .cc, .cpp, .cxx, .c++, .C
  • C 및 C++ 헤더 파일: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C 전처리기를 사용한 어셈블러: .S
  • 보관 파일: .a, .pic.a
  • "항상 연결" 라이브러리: .lo, .pic.lo
  • 버전이 지정되거나 버전이 지정되지 않은 공유 라이브러리: .so, .so.version
  • 객체 파일: .o, .pic.o

이러한 파일을 생성하는 규칙을 모두 만듭니다. 다양한 확장자가 GCC 규칙에 따라 다른 프로그래밍 언어를 나타냅니다.

additional_linker_inputs

List of labels; optional

이러한 파일을 C++ 링커 명령어에 전달합니다.

예를 들어, 컴파일된 Windows .res 파일을 바이너리 대상에 삽입하도록 여기에 제공할 수 있습니다.

copts

List of strings; optional

C++ 컴파일 명령어에 이러한 옵션을 추가합니다. "Make var" 대체 및 Bourne 셸 토큰화가 적용됩니다.

이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서로 COPTS에 추가됩니다. 플래그는 이 종속 항목을 컴파일하는 경우에만 적용되며 종속 항목이 아닌 경우에만 적용되므로 다른 위치에 포함된 헤더 파일에는 주의해야 합니다. 모든 경로는 현재 패키지가 아닌 작업공간을 기준으로 해야 합니다.

패키지에서 기능 no_copts_tokenization을 선언하는 경우, Bourne 셸 토큰화는 단일 "Make" 변수로 구성된 문자열에만 적용됩니다.

defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며 컴파일 명령줄에 이 타겟과 이를 사용하는 모든 규칙에 추가됩니다. 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러운 경우 대신 local_defines에 정의 값을 추가하세요.
includes

List of strings; optional

컴파일 라인에 추가할 dir의 목록입니다.

"Makevariable" 대체가 적용됩니다. 각 문자열 앞에는 -isystem가 붙고 COPTS에 추가됩니다. COPTS와 달리 이러한 플래그는 이 규칙과 규칙을 사용하는 모든 규칙에 추가됩니다. (참고: 규칙이 적용되는 것은 아닙니다.) 매우 광범위한 영향을 미칠 수 있으므로 주의해야 합니다. 의심스러우면 COPTS에 "-I" 플래그를 추가하세요.

헤더는 src 또는 hdr에 추가해야 하며, 그러지 않으면 컴파일이 샌드박스 처리 (기본값)될 때 종속 규칙에 사용할 수 없습니다.

linkopts

List of strings; optional

C++ 링커 명령어에 이러한 플래그를 추가합니다. "Make" 변수 대체에 따라 Bourne 셸 토큰화라벨 확장이 적용됩니다. 이 속성의 각 문자열은 바이너리 타겟을 연결하기 전에 LINKOPTS에 추가됩니다.

$ 또는 -로 시작하지 않는 이 목록의 각 요소는 deps의 타겟 라벨로 간주됩니다. 이 타겟에서 생성된 파일 목록은 링커 옵션에 추가됩니다. 라벨이 잘못되었거나 deps에 선언되지 않으면 오류가 보고됩니다.

linkstatic

Boolean; optional; default is False

cc_binarycc_test의 경우: 바이너리 모드에서 바이너리를 연결합니다. cc_library.linkstatic의 경우 아래를 참고하세요.

기본적으로 이 옵션은 cc_binary에 사용 설정되어 있고 나머지에는 사용 중지되어 있습니다.

사용 설정되고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 사용자 라이브러리에 대해 .a's 대신 .so's로 연결하도록 빌드 도구에 알립니다. 정적 라이브러리가 없는 라이브러리와 마찬가지로 일부 시스템 라이브러리는 계속 동적으로 링크될 수 있습니다. 따라서 결과 실행 파일은 여전히 동적으로 연결되므로 대부분 정적만 유지됩니다.

실행 파일을 연결하는 방법에는 세 가지가 있습니다.

  • static_static 특징과 함께 STATIC.모든 항목이 정적으로 연결됩니다. 예: "gcc -static foo.o libbar.a libbaz.a -lm".
    이 모드는 features 속성에서 fully_static_link를 지정하여 사용 설정합니다.
  • 정적인 경우 모든 사용자 라이브러리가 정적으로 연결되어 있지만(정적 버전을 사용할 수 있는 경우), 시스템 라이브러리(예: C/C++ 런타임 라이브러리 제외)가 동적으로 연결된 경우(예: "gcc foo.o libfoo.a libbaz.a -lm").
    이 모드를 사용 설정하면 linkstatic=True이 지정됩니다.
  • 동적인 경우 모든 라이브러리가 동적으로 연결되는 동적인(예: 동적인 경우)(예: 'gcc foo.o libfoo.so libbaz.so -lm'.
    ). 이 모드는 linkstatic=False을 지정하여 사용 설정됩니다.

cc_library() 규칙에 사용될 경우 linkstatic 속성의 의미가 다릅니다. C++ 라이브러리의 경우 linkstatic=True는 정적 연결만 허용되므로 .so이 생성되지 않음을 나타냅니다. linkstatic=False는 정적 라이브러리 생성이 차단되지 않습니다. 이 속성은 동적 라이브러리 생성을 제어하기 위한 것입니다.

linkstatic=False이면 빌드 도구가 *.runfiles 영역에서 종속된 공유 라이브러리에 대한 심볼릭 링크를 만듭니다.

local_defines

List of strings; optional

컴파일 라인에 추가할 정의 목록입니다. "Make" 변수 대체 및 Bourne 셸 토큰화가 적용됩니다. 단일 Bourne 셸 토큰으로 구성되어야 하는 각 문자열은 -D 앞에 추가되며, 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

malloc의 기본 종속 항목을 재정의합니다.

기본적으로 C++ 바이너리는 빈 라이브러리인 //tools/cpp:malloc에 연결되므로 바이너리는 libc malloc을 사용하여 끝납니다. 이 라벨은 cc_library를 참조해야 합니다. 비 C++ 규칙의 컴파일인 경우 이 옵션은 적용되지 않습니다. 이 속성 값은 linkshared=True을 지정하면 무시됩니다.

nocopts

String; optional

C++ 컴파일 명령어에서 일치하는 옵션을 삭제합니다. "Make" 변수 대체가 적용됩니다. 이 속성 값은 정규 표현식으로 해석됩니다. 이 정규 표현식과 일치하는 모든 기존 COPTS(규칙의 copts 속성에 명시적으로 지정된 값 포함)이 이 규칙을 컴파일하려는 목적으로 COPTS에서 삭제됩니다. 이 속성은 거의 필요하지 않습니다.
stamp

Integer; optional; default is 0

빌드 정보를 바이너리에 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다.
  • stamp = 1: --nostamp 빌드의 경우에도 항상 빌드 정보에 바이너리를 스탬프합니다. 이 설정은 피해야 합니다. 바이너리의 원격 캐싱과 이에 종속되는 모든 다운스트림 작업이 종료될 수 있기 때문입니다.
  • stamp = 0: 항상 빌드 정보를 상수 값으로 바꿉니다. 이렇게 하면 우수한 빌드 결과 캐싱이 가능합니다.
  • stamp = -1: 빌드 정보 삽입은 --[no]stamp 플래그에 의해 제어됩니다.

스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다.

win_def_file

Label; optional

링커에 전달할 Windows DEF 파일입니다.

이 속성은 Windows가 타겟 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다.

cc_toolchain

cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)

C++ 도구 모음을 나타냅니다.

이 규칙의 역할은 다음과 같습니다.

  • C++ 작업을 실행하는 데 필요한 모든 아티팩트 수집 all_files, compiler_files, linker_files 등의 속성이나 _files로 끝나는 기타 속성에 의해 수행됩니다. 이러한 속성은 가장 필요한 모든 파일을 그룹화하는 파일 그룹입니다.
  • C++ 작업의 올바른 명령줄을 생성합니다. CcToolchainConfigInfo 제공자를 사용하면 됩니다 (아래 세부정보 참고).

toolchain_config 속성을 사용하여 C++ 도구 모음을 구성합니다. 정교한 C++ 도구 모음 구성 및 도구 모음 선택 문서도 이 페이지를 참조하세요.

tags = ["manual"]를 사용하여 bazel build //...을 호출할 때 도구 모음이 불필요하게 빌드 및 구성되는 것을 방지합니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

all_files

Label; required

모든 cc_toolchain 아티팩트 컬렉션입니다. 이러한 아티팩트는 모든 rules_cc 관련 작업에 입력으로 추가됩니다 (아래 속성의 아티팩트 세트를 더 정확하게 사용하는 작업 제외). Bazel은 all_files이 모든 다른 아티팩트 제공 속성의 상위 집합이라고 가정합니다 (예: linktamp 컴파일에는 컴파일 및 링크 파일이 모두 필요하므로 all_files).

이는 cc_toolchain.files에 포함된 항목으로, C++ 도구 모음을 사용하는 모든 Starlark 규칙에 사용됩니다.

ar_files

Label; optional

보관처리 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다.

as_files

Label; optional

조립 작업에 필요한 모든 cc_toolchain 아티팩트 컬렉션입니다.

compiler

String; optional; nonconfigurable

지원 중단됨. 대신 toolchain_identifier 속성을 사용합니다. CrowsTOOL에 Starlark로 마이그레이션한 후 무작동하고 #7075에 의해 삭제됩니다.

설정되면 교차 도구_구성.도구 모음 선택을 실행하는 데 사용됩니다. --cpu Bazel 옵션보다 우선 적용됩니다.

compiler_files

Label; required

컴파일 작업에 필요한 모든 cc_toolchain 아티팩트 컬렉션입니다.

현재 lto_backend 작업만 사용하며 일반 컴파일 작업에서는 all_files(#6927)를 사용합니다.

compiler_files_without_includes

Label; optional

입력 검색이 지원되는 경우 (현재는 Google만 해당) 컴파일 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다.
coverage_files

Label; optional

커버리지 작업에 필요한 모든 cc_toolchain 아티팩트 컬렉션입니다. 지정하지 않으면 all_files를 사용합니다.
cpu

String; optional; nonconfigurable

지원 중단됨. 대신 toolchain_identifier 속성을 사용합니다. StarOSSk로 마이그레이션한 후의 무역으로, #7075에 의해 삭제됩니다.

설정되면 교차 도구_구성.도구 모음 선택을 실행하는 데 사용됩니다. --cpu Bazel 옵션보다 우선 적용됩니다.

dwp_files

Label; required

dwp 작업에 필요한 모든 cc_toolchain 아티팩트 컬렉션입니다.
dynamic_runtime_lib

Label; optional

C++ 런타임 라이브러리의 동적 라이브러리 아티팩트 (예: libstdc++.so)

이 속성은 'static_link_cpp_runtimes' 기능이 사용 설정되고 종속 항목을 동적으로 연결하는 경우에 사용됩니다.

exec_transition_for_inputs

Boolean; optional; default is True

기본적으로 타겟 플랫폼 (예: 타겟 플랫폼)이 없는 대신 실행 플랫폼의 모든 파일 입력을 cc_toolchain으로 빌드하려면 True로 설정하세요.
libc_top

Label; optional

컴파일/링크 작업을 위한 입력으로 전달된 libc의 아티팩트 모음입니다.
linker_files

Label; required

작업을 연결하는 데 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다.
module_map

Label; optional

모듈식 빌드에 사용될 모듈 맵 아티팩트입니다.
objcopy_files

Label; required

objcopy 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다.
static_runtime_lib

Label; optional

C++ 런타임 라이브러리의 정적 라이브러리 아티팩트 (예: libstdc++.a)

이 기능은 'static_link_cpp_runtimes' 기능이 사용 설정될 때 그리고 종속 항목을 정적으로 연결할 때 사용됩니다.

strip_files

Label; required

스트립 작업에 필요한 모든 cc_toolchain 아티팩트 컬렉션입니다.
supports_header_parsing

Boolean; optional; default is False

cc_toolchain에서 헤더 파싱 작업을 지원하는 경우 True로 설정합니다.
supports_param_files

Boolean; optional; default is True

cc_toolchain에서 작업을 연결할 때 매개변수 파일을 사용하는 것을 지원하는 경우 True로 설정됩니다.
toolchain_config

Label; required

cc_toolchain_config_info를 제공하는 규칙의 라벨입니다.
toolchain_identifier

String; optional; nonconfigurable

이 cc_toolchain을 상응하는 Crosstool_config.toolchain과 일치시키는 데 사용되는 식별자입니다.

#5380 문제가 해결될 때까지 cc_toolchainCROSSTOOL.toolchain와 연결하는 데 권장되는 방법입니다. toolchain_config 속성(#5380)으로 대체됩니다.

cc_toolchain_suite

cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

C++ 도구 모음 컬렉션을 나타냅니다.

이 규칙의 역할은 다음과 같습니다.

  • 모든 관련 C++ 도구 모음 수집
  • Bazel에 전달된 --cpu--compiler 옵션에 따라 도구 모음 1개 선택

정교한 C++ 도구 모음 구성 및 도구 모음 선택 문서도 이 페이지를 참조하세요.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

"<cpu>" 또는 "<cpu>|<compiler>" 문자열에서 cc_toolchain 라벨로 전환됩니다. "<cpu>"는 --cpu만 Bazel에 전달되고 "<cpu>|<compiler>"는 --cpu--compiler가 모두 Bazel에 전달될 때 사용됩니다. 예:

          cc_toolchain_suite(
            name = "toolchain",
            toolchains = {
              "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc",
              "piii": ":my_cc_toolchain_for_piii_using_default_compiler",
            },
          )