이 페이지에는 C++ 프로젝트에서 Bazel을 사용하는 데 도움이 되는 리소스가 포함되어 있습니다. Bazel을 사용하여 C++ 프로젝트를 빌드하는 것과 관련된 튜토리얼, 빌드 규칙, 기타 정보로 연결됩니다.
Bazel 사용
다음 리소스는 C++ 프로젝트에서 Bazel을 사용하는 데 도움이 됩니다.
권장사항
다음은 일반 Bazel 권장사항 외에도 C++ 프로젝트에만 적용되는 권장사항입니다.
BUILD 파일
BUILD 파일을 만들 때는 다음 가이드라인을 따르세요.
각
BUILD
파일에는 디렉터리의 컴파일 단위당 하나의cc_library
규칙 타겟이 포함되어야 합니다.증분성을 극대화하고 빌드를 병렬화하려면 C++ 라이브러리를 최대한 세분화해야 합니다.
srcs
에 소스 파일이 하나만 있는 경우 라이브러리 이름을 해당 C++ 파일 이름과 동일하게 지정합니다. 이 라이브러리에는 C++ 파일, 일치하는 헤더 파일, 라이브러리의 직접 종속 항목이 포함되어야 합니다. 예를 들면 다음과 같습니다.cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )
파일의
cc_library
타겟당 하나의cc_test
규칙 타겟을 사용합니다. 타겟 이름을[library-name]_test
, 소스 파일 이름을[library-name]_test.cc
으로 지정합니다. 예를 들어 위에 표시된mylib
라이브러리 타겟의 테스트 타겟은 다음과 같습니다.cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
경로 포함
포함 경로의 경우 다음 가이드라인을 따르세요.
모든 포함 경로를 작업공간 디렉터리를 기준으로 합니다.
시스템 외 헤더에는 각괄호 (
#include <foo/bar/baz.h>
)가 아닌 따옴표 붙은 포함 (#include "foo/bar/baz.h"
)을 사용하세요..
(현재 디렉터리) 또는..
(상위 디렉터리)와 같은 UNIX 디렉터리 바로가기를 사용하지 마세요.프로젝트 저장소 외부를 가리키는 포함이 필요한 기존 코드 또는
third_party
코드(예: 접두사가 필요한 외부 저장소 포함)의 경우cc_library
규칙 타겟에서include_prefix
및strip_include_prefix
인수를 사용합니다.
도구 모음 기능
다음과 같은 선택적 기능을 사용하면 C++ 프로젝트의 위생 상태를 개선할 수 있습니다. --features
명령줄 플래그 또는 repo
, package
또는 cc_*
규칙의 features
속성을 사용하여 사용 설정할 수 있습니다.
parse_headers
기능을 사용하면--process_headers_in_dependencies
플래그를 사용할 때 빌드된 타겟 및 종속 항목의 모든 헤더 파일을 파싱(컴파일하지 않음)하는 데 C++ 컴파일러가 사용됩니다. 이렇게 하면 헤더 전용 라이브러리의 문제를 포착하고 헤더가 자체 포함되어 있고 포함된 순서와 무관하도록 할 수 있습니다.layering_check
기능은 타겟에 직접 종속 항목에서 제공하는 헤더만 포함되도록 적용합니다. 기본 도구 모음은clang
를 컴파일러로 사용하여 Linux에서 이 기능을 지원합니다.