C++ 규칙과 통합

문제 신고하기 소스 보기

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

C++ 도구 모음 액세스

플랫폼도구 모음으로 지속적인 C++ 규칙 이전이 진행 중이므로 @bazel_tools//tools/cpp:toolchain_utils.bzl에서 제공되는 도우미 함수를 사용해야 합니다. 이 함수는 도구 모음이 사용 중지되거나 사용 설정되었을 때 모두 작동합니다. 규칙에서 C++ 도구 모음을 사용하려면 _cc_toolchain라는 Label 속성을 추가하고 @bazel_tools//tools/cpp:current_cc_toolchain (현재 선택된 C++ 도구 모음을 가리키는 cc_toolchain_alias 규칙의 인스턴스)를 가리킵니다. 그런 다음 규칙 구현에서 find_cpp_toolchain(ctx)를 사용하여 CcToolchainInfo를 가져옵니다. 완전히 작동하는 예는 rules_cc 예에서 확인할 수 있습니다.

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

일반적으로 C++ 규칙과 동일한 명령줄 플래그를 사용하도록 C++ 도구 모음과 통합하지만 C++ 작업을 직접 사용하지는 않습니다. 이는 작업을 작성할 때 C++ 도구 모음과 일관되게 작동해야 하기 때문입니다. 예를 들어 백그라운드에서 C++ 컴파일러를 호출하는 도구에 C++ 명령줄 플래그를 전달하는 경우가 이에 해당합니다.

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

compiler_executable과 같은 도구별 getter는 계속 있습니다. 도구별 getter는 결국 삭제되므로 get_tool_for_action를 사용하는 것이 좋습니다.

완전히 작동하는 예는 rules_cc 예에서 확인할 수 있습니다.

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

대부분의 C++ 규칙은 CompilationContextLinkingContext를 포함하는 제공자인 CcInfo를 제공합니다. 이를 통해 연결할 모든 전이 헤더 또는 라이브러리와 같은 정보에 액세스할 수 있습니다. CcInfoCcToolchainInfo에서 맞춤 Starlark 규칙은 필요한 모든 정보를 가져올 수 있습니다.

맞춤 Starlark 규칙이 CcInfo를 제공하는 경우 이는 C++ 규칙에도 종속될 수 있다는 신호입니다. 하지만 주의합니다. 그래프를 통해 CcInfo를 사용하는 바이너리 규칙으로만 CcInfo를 전파해야 하는 경우 다른 제공자에서 CcInfo를 래핑합니다. 예를 들어 java_library 규칙이 네이티브 종속 항목을 java_binary까지 전파하려면 CcInfo를 직접 제공해서는 안 됩니다 (java_library에 종속된 cc_binary는 적절하지 않음). 예를 들어 JavaCcInfo에 래핑해야 합니다.

완전히 작동하는 예는 rules_cc 예에서 확인할 수 있습니다.

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

아직 안정적이지 않음. 이 섹션은 API가 안정화되면 업데이트될 예정입니다. 최신 정보는 #4570을 참고하세요.