이 페이지에서는 다양한 수준에서 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++ 규칙은 다음 기능에 따라 명령줄을 구성하는 특별한 방법을 사용합니다. 구성을 참조하세요. 명령줄을 구성하려면 다음이 필요합니다.
features
및action_configs
-CcToolchainConfigInfo
에서 가져옴CcToolchainInfo
에 캡슐화됨FeatureConfiguration
- cc_common.configure_features에서 반환- cc 도구 모음 구성 변수 - cc_common.create_compile_variables 또는 cc_common.create_link_variables.
다음과 같은 도구별 getter도 있습니다.
compiler_executable이 포함됩니다.
도구별 getter가 이를 사용하므로 get_tool_for_action
를 선호합니다.
결국 삭제됩니다.
실제 작업 예는 rules_cc 예제
C++ 규칙에 종속되거나 C++ 규칙이 종속될 수 있는 Starlark 규칙 구현
대부분의 C++ 규칙은
CcInfo
님,
CompilationContext
를 포함하는 제공업체
및
LinkingContext
:
이를 통해 모든 전이 헤더와 같은 정보에 액세스할 수 있습니다.
또는 라이브러리를 사용하여 연결합니다. CcInfo
및 CcToolchainInfo
맞춤 콘텐츠
Starlark 규칙은 필요한 모든 정보를 얻을 수 있어야 합니다.
맞춤 Starlark 규칙이 CcInfo
를 제공하는 경우
그들도 그것에 의존할 수 있습니다. 하지만 조심하세요.
CcInfo
: 그래프를 통해 이진 규칙까지 전달한 다음 이를 활용하는 바이너리 규칙
다른 제공업체의 CcInfo
예를 들어 java_library
규칙에 따라
네이티브 종속 항목을 java_binary
까지 전파할 수 있지만
직접 CcInfo
(java_library
에 따라 cc_binary
는 적절하지 않음)
예를 들어 JavaCcInfo
와 같이 래핑해야 합니다.
실제 작업 예는 rules_cc 예제
C++ 규칙의 논리 및 작업 재사용
아직 안정적이지 않음, 이 섹션은 API가 안정화되면 업데이트될 예정입니다. 팔로우 #4570: 최신 확인할 수 있습니다.