이 페이지에서는 다양한 수준에서 C++ 규칙과 통합하는 방법을 설명합니다.
C++ 도구 모음에 액세스
C++ 규칙이
플랫폼 및 도구 모음으로 계속 이전되고 있으므로
도구 모음이 사용 중지 및 사용 설정된 경우 모두 작동하는
@bazel_tools//tools/cpp:toolchain_utils.bzl에서 사용할 수 있는 도우미 함수를 사용해야 합니다. 규칙에서 C++
도구 모음에 종속되려면
Label
이라는 속성을 추가하고 이를
으로 지정합니다 (@bazel_tools//tools/cpp:current_cc_toolchain 규칙의 인스턴스로, 현재 선택된 C++ 도구 모음을 가리킵니다)._cc_toolchaincc_toolchain_alias
그런 다음 규칙 구현에서
find_cpp_toolchain(ctx)
를 사용하여
CcToolchainInfo를 가져옵니다.
완전한 작업 예시는
rules_cc 예시에서 확인할 수 있습니다.
C++ 도구 모음을 사용하여 명령줄 및 환경 변수 생성
일반적으로 C++ 규칙과 동일한 명령줄 플래그를 갖지만 C++ 작업을 직접 사용하지 않도록 C++ 도구 모음과 통합합니다. 이는 자체 작업을 작성할 때 C++ 도구 모음과 일관되게 동작해야 하기 때문입니다. 예를 들어 백그라운드에서 C++ 컴파일러를 호출하는 도구에 C++ 명령줄 플래그를 전달합니다.
C++ 규칙은 기능 구성을 기반으로 명령줄을 구성하는 특별한 방법을 사용합니다. 명령줄을 구성하려면 다음이 필요합니다.
features및action_configs\-CcToolchainConfigInfo에서 가져오고CcToolchainInfo에 캡슐화됩니다.FeatureConfiguration- cc_common.configure_features에서 반환됩니다.- cc 도구 모음 구성 변수 - cc_common.create_compile_variables 또는 cc_common.create_link_variables에서 반환됩니다.
compiler_executable과 같은 도구별 getter가 여전히 있습니다.
도구별 getter는 결국 삭제되므로 이러한 getter보다 get_tool_for_action을 사용하는 것이 좋습니다.
완전한 작업 예시는 rules_cc 예시에서 확인할 수 있습니다.
C++ 규칙에 종속되거나 C++ 규칙이 종속될 수 있는 Starlark 규칙 구현
대부분의 C++ 규칙은
CcInfo,
다음을 포함하는 제공자인 CompilationContext
및
LinkingContext를 제공합니다.
이를 통해 모든 전이 헤더
또는 연결할 라이브러리와 같은 정보에 액세스할 수 있습니다. CcInfo 및 CcToolchainInfo에서 커스텀
Starlark 규칙은 필요한 모든 정보를 가져올 수 있어야 합니다.
커스텀 Starlark 규칙이 CcInfo를 제공하는 경우 C++ 규칙도
이에 종속될 수 있다는 신호입니다. 하지만 주의하세요. 그래프를 통해
CcInfo를 사용하는 바이너리 규칙에
CcInfo를 전파하기만 하면 되는 경우 다른 제공자에 래핑합니다. 예를 들어 java_library 규칙이 기본 종속 항목을 java_binary까지 전파하려는 경우 CcInfo를 직접 제공해서는 안 됩니다 (java_library에 종속된 cc_binary는 의미가 없음). 예를 들어 JavaCcInfo에 래핑해야 합니다.
완전한 작업 예시는 rules_cc 예시에서 확인할 수 있습니다.
C++ 규칙의 로직 및 작업 재사용
아직 안정화되지 않았습니다. API가 안정화되면 이 섹션이 업데이트됩니다. 최신 정보는 #4570을 참고하세요.