C++ 규칙과 통합

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

이 페이지에서는 다양한 수준에서 C++ 규칙과 통합하는 방법을 설명합니다.

C++ 도구 모음 액세스

이유: 지속적인 C++ 규칙 이전 플랫폼도구 모음에 포함되는 경우 http://www.example.com/ 등의 @bazel_tools//tools/cpp:toolchain_utils.bzl, 이는 도구 모음이 사용 중지되거나 사용 설정되었을 때 모두 작동합니다. C++ 도구 모음을 사용하려면 Label 드림 이름이 _cc_toolchain인 속성을 사용하고 대상: @bazel_tools//tools/cpp:current_cc_toolchain( 현재 선택된 C++ 도구 모음을 가리키는 cc_toolchain_alias 규칙). 그런 다음 규칙 구현에서 find_cpp_toolchain(ctx) 드림 다음을 얻으세요. CcToolchainInfo 실제 작업 예는 rules_cc 예제

C++ 도구 모음을 사용하여 명령줄 및 환경 변수 생성

일반적으로 C++ 툴체인과 통합하여 명령줄 플래그를 사용할 수도 있지만, C++ 작업을 직접 사용하지는 않습니다. 작업을 작성할 때는 C++ 도구 모음과 일관되게 업데이트(예: 백그라운드에서 C++ 컴파일러를 호출하는 도구에 추가합니다.

C++ 규칙은 다음 기능에 따라 명령줄을 구성하는 특별한 방법을 사용합니다. 구성을 참조하세요. 명령줄을 구성하려면 다음이 필요합니다.

다음과 같은 도구별 getter도 있습니다. compiler_executable이 포함됩니다. 도구별 getter가 이를 사용하므로 get_tool_for_action를 선호합니다. 결국 삭제됩니다.

실제 작업 예는 rules_cc 예제

C++ 규칙에 종속되거나 C++ 규칙이 종속될 수 있는 Starlark 규칙 구현

대부분의 C++ 규칙은 CcInfo님, CompilationContext를 포함하는 제공업체 및 LinkingContext: 이를 통해 모든 전이 헤더와 같은 정보에 액세스할 수 있습니다. 또는 라이브러리를 사용하여 연결합니다. CcInfoCcToolchainInfo 맞춤 콘텐츠 Starlark 규칙은 필요한 모든 정보를 얻을 수 있어야 합니다.

맞춤 Starlark 규칙이 CcInfo를 제공하는 경우 그들도 그것에 의존할 수 있습니다. 하지만 조심하세요. CcInfo: 그래프를 통해 이진 규칙까지 전달한 다음 이를 활용하는 바이너리 규칙 다른 제공업체의 CcInfo 예를 들어 java_library 규칙에 따라 네이티브 종속 항목을 java_binary까지 전파할 수 있지만 직접 CcInfo (java_library에 따라 cc_binary는 적절하지 않음) 예를 들어 JavaCcInfo와 같이 래핑해야 합니다.

실제 작업 예는 rules_cc 예제

C++ 규칙의 논리 및 작업 재사용

아직 안정적이지 않음, 이 섹션은 API가 안정화되면 업데이트될 예정입니다. 팔로우 #4570: 최신 확인할 수 있습니다.