이 페이지에서는 다양한 수준에서 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++ 규칙은 기능 구성에 따라 특수한 명령줄을 구성합니다. 명령줄을 구성하려면 다음이 필요합니다.
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는 결국 삭제되므로 이보다 get_tool_for_action
를 사용하는 것이 좋습니다.
완벽하게 작동하는 예는 rules_cc 예시를 참고하세요.
C++ 규칙 또는 C++ 규칙이 사용할 수 있는 Starlark 규칙 구현
대부분의 C++ 규칙은 CompilationContext
및 LinkingContext
를 포함하는 제공자인 CcInfo
를 제공합니다.
이를 통해 연결할 모든 전이 헤더 또는 라이브러리와 같은 정보에 액세스할 수 있습니다. CcInfo
및 CcToolchainInfo
커스텀 Starlark 규칙에서 필요한 모든 정보를 가져올 수 있어야 합니다.
맞춤 Starlark 규칙이 CcInfo
를 제공하는 경우 이 규칙은 C++ 규칙에도 종속될 수 있음을 나타냅니다. 하지만 주의하세요. 그래프를 통해 CcInfo
를 전파한 다음 이를 사용하는 바이너리 규칙으로 전파해야 하는 경우에는 다른 제공업체에 CcInfo
를 래핑합니다. 예를 들어java_library
네이티브 종속 항목을java_binary
,CcInfo
직접 (cc_binary
다음에 따라java_library
적합하지 않습니다. 예를 들어 다음과 같이 래핑해야 합니다.JavaCcInfo
에서 확인할 수 있습니다.
완벽하게 작동하는 예는 rules_cc 예시를 참고하세요.
C++ 규칙의 로직 및 작업 재사용
아직 안정적이지 않음: 이 섹션은 API가 안정화되면 업데이트됩니다. 최신 정보는 #4570을 참조하세요.