규칙
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
규칙 소스 보기cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
암시적 출력 대상
name.stripped
(명시적으로 요청된 경우에만 빌드됨): 바이너리의 삭제된 버전입니다.strip -g
는 바이너리에서 실행되어 디버그 기호를 삭제합니다. 추가 스트립 옵션은 명령줄에서--stripopt=-foo
를 사용하여 제공할 수 있습니다. 이 출력은 명시적으로 요청된 경우에만 빌드됩니다.name.dwp
(명시적으로 요청된 경우에만 빌드됨): Fission이 사용 설정된 경우 원격으로 배포된 바이너리를 디버깅하는 데 적합한 디버그 정보 패키지 파일입니다. 그 외의 경우: 빈 파일입니다.
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은
|
srcs
|
라벨 목록. 기본값은
모든 규칙의 이름이
허용되는
이러한 파일을 생성하는 모든 규칙을 확인할 수 있습니다. gcc 규칙에 따라 다른 확장 프로그램이 다른 프로그래밍 언어를 나타냅니다. |
additional_linker_inputs
|
라벨 목록. 기본값은 예를 들어 컴파일된 Windows .res 파일을 여기에서 제공하여 바이너리 타겟에 삽입할 수 있습니다. |
copts
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지에서 기능
|
defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되며 이 대상의 컴파일 명령줄과 이 대상에 종속되는 모든 규칙에 추가됩니다. 광범위한 영향을 미칠 수 있으므로 매우 주의해야 합니다. 확실하지 않은 경우 정의된 값을 local_defines 에 대신 추가하세요.
|
includes
|
문자열 목록. 기본값은
'Makevariable' 대체가 적용됩니다.
각 문자열은 헤더는 srcs 또는 hdrs에 추가되어야 합니다. 그렇지 않으면 컴파일이 샌드박스 상태일 때 (기본값) 종속 규칙에 헤더를 사용할 수 없습니다. |
link_extra_lib
|
라벨. 기본값은
기본적으로 C++ 바이너리는 |
linkopts
|
문자열 목록. 기본값은 LINKOPTS 에 추가됩니다.
|
linkshared
|
부울, 구성 불가, 기본값은 linkshared=True 을(를) 포함하세요. 기본적으로 이 옵션은 사용 중지되어 있습니다.
이 플래그가 있으면
|
linkstatic
|
부울. 기본값은 cc_binary 및 cc_test 의 경우: 바이너리를 정적 모드로 연결합니다. cc_library.linkstatic : 아래를 참고하세요.
기본적으로 이 옵션은
사용 설정되어 있고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 항상 사용자 라이브러리의 실행 파일을 연결하는 방법에는 세 가지가 있습니다.
|
local_defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되어 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
|
malloc
|
라벨. 기본값은
기본적으로 C++ 바이너리는 빈 라이브러리인 |
nocopts
|
문자열. 기본값은 COPTS (규칙의 copts 속성에 명시적으로 지정된 값 포함)은 이 규칙을 컴파일하기 위해 COPTS 에서 삭제됩니다.
이 속성은 거의 필요하지 않습니다.
|
stamp
|
정수이며 기본값은
스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다. |
win_def_file
|
라벨. 기본값은 이 속성은 Windows가 대상 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다. |
cc_import
규칙 소스 보기cc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
cc_import
규칙을 사용하면 사용자가 사전 컴파일된 C/C++ 라이브러리를 가져올 수 있습니다.
다음은 일반적인 사용 사례입니다.
1. 정적 라이브러리 연결
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", # If alwayslink is turned on, # libmylib.a will be forcely linked into any binary that depends on it. # alwayslink = 1, )2. 공유 라이브러리 연결 (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. 인터페이스 라이브러리를 사용하여 공유 라이브러리 연결 (Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )4.
system_provided=True
를 사용하여 공유 라이브러리 연결 (Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )5. 정적 라이브러리 또는 공유 라이브러리
에 연결 Unix의 경우:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )Windows의 경우:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import
는 include 속성을 지원합니다. 예를 들면 다음과 같습니다.
cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은 deps 에 관한 일반적인 설명은 대부분의 빌드 규칙에 의해 정의되는 일반적인 속성을 참조하세요.
|
hdrs
|
라벨 목록. 기본값은 |
alwayslink
|
부울. 기본값은 알려진 문제로 인해 Windows의 VS 2017에서 Alwayslink가 작동하지 않으면 VS 2017을 최신 버전으로 업그레이드하세요. |
interface_library
|
라벨. 기본값은 허용되는 파일 형식:
|
shared_library
|
라벨. 기본값은 허용되는 파일 형식: |
static_library
|
라벨. 기본값은 허용되는 파일 형식: |
system_provided
|
부울. 기본값은 interface_library 를 지정해야 하고 shared_library 는 비어 있어야 합니다.
|
cc_library
규칙 소스 보기cc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
헤더 포함 확인
빌드에 사용되는 모든 헤더 파일은 cc_*
규칙의 hdrs
또는 srcs
에서 선언해야 합니다. 이는 시행됩니다.
cc_library
규칙의 경우 hdrs
의 헤더는 라이브러리의 공개 인터페이스를 구성하며 라이브러리 자체의 hdrs
및 srcs
에 있는 파일과 deps
에 라이브러리를 나열하는 cc_*
규칙의 hdrs
및 srcs
에 있는 파일에서 모두 직접 포함될 수 있습니다.
srcs
의 헤더는 라이브러리 자체의 hdrs
및 srcs
에 있는 파일에서만 직접 포함되어야 합니다. 헤더를 hdrs
에 배치할지 srcs
에 배치할지 결정할 때는 이 라이브러리의 소비자가 직접 포함할 수 있도록 할지 물어봐야 합니다. 이는 프로그래밍 언어의 public
공개 상태와 private
공개 상태 사이의 결정과 거의 동일합니다.
cc_binary
및 cc_test
규칙에는 내보낸 인터페이스가 없으므로 hdrs
속성도 없습니다. 바이너리 또는 테스트에 직접 속하는 모든 헤더는 srcs
에 나열되어야 합니다.
다음 예를 통해 이러한 규칙을 설명합니다.
cc_binary( name = "foo", srcs = [ "foo.cc", "foo.h", ], deps = [":bar"], ) cc_library( name = "bar", srcs = [ "bar.cc", "bar-impl.h", ], hdrs = ["bar.h"], deps = [":baz"], ) cc_library( name = "baz", srcs = [ "baz.cc", "baz-impl.h", ], hdrs = ["baz.h"], )
이 예에서 허용되는 직접 포함은 아래 표에 나와 있습니다. 예를 들어 foo.cc
는 foo.h
및 bar.h
를 직접 포함할 수 있지만 baz.h
는 포함할 수 없습니다.
파일 포함 | 허용되는 포함 |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
bar-impl.h | bar.h.baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.h baz-impl.h |
포함 확인 규칙은 직접 포함에만 적용됩니다. 위의 예에서 foo.cc
는 bar.h
를 포함할 수 있으며, 여기에는 baz.h
가 포함될 수 있으며 이 경우 baz-impl.h
를 포함할 수 있습니다. 기술적으로 .cc
파일의 컴파일은 전이 deps
클로저의 모든 cc_library
에 있는 hdrs
또는 srcs
에 있는 헤더 파일을 전이적으로 포함할 수 있습니다. 이 경우 컴파일러는 foo.cc
를 컴파일할 때 baz.h
및 baz-impl.h
를 읽을 수 있지만 foo.cc
에는 #include "baz.h"
가 포함되어서는 안 됩니다. 그렇게 하려면 baz
를 foo
의 deps
에 추가해야 합니다.
Bazel은 도구 모음 지원에 의존하여 포함 검사 규칙을 적용합니다.
layering_check
기능은 도구 모음에서 지원되어야 하며 명시적으로 요청됩니다. 예를 들어 --features=layering_check
명령줄 플래그 또는 package
함수의 features
매개변수를 통해 요청할 수 있습니다. Bazel에서 제공하는 도구 모음은 Unix 및 macOS의 clang에서만 이 기능을 지원합니다.
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은
|
srcs
|
라벨 목록. 기본값은
모든 규칙의 이름이
허용되는
이러한 파일을 생성하는 모든 규칙을 확인할 수 있습니다. gcc 규칙에 따라 다른 확장 프로그램이 다른 프로그래밍 언어를 나타냅니다. |
hdrs
|
라벨 목록. 기본값은 이 위치는 라이브러리의 인터페이스를 설명하는 헤더 파일을 선언할 때 가장 선호되는 위치입니다. 이러한 헤더는 이 규칙 또는 종속 규칙에 소스가 포함할 수 있게 됩니다.
이 라이브러리의 클라이언트에 의해 포함되어서는 안 되는 헤더는 게시된 헤더에 포함되더라도 대신 |
additional_compiler_inputs
|
라벨 목록. 기본값은 |
additional_linker_inputs
|
라벨 목록. 기본값은 예를 들어 컴파일된 Windows .res 파일을 여기에서 제공하여 바이너리 타겟에 삽입할 수 있습니다. |
alwayslink
|
부울. 기본값은 srcs 에 나열된 파일의 모든 객체 파일에서 연결됩니다.
이는 코드가 바이너리의 코드에 의해 명시적으로 호출되지 않는 경우, 예를 들어 코드가 일부 서비스에서 제공하는 일부 콜백을 수신하도록 등록된 경우 유용합니다.
알려진 문제로 인해 Windows의 VS 2017에서 Alwayslink가 작동하지 않으면 VS 2017을 최신 버전으로 업그레이드하세요. |
copts
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지에서 기능
|
defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되며 이 대상의 컴파일 명령줄과 이 대상에 종속되는 모든 규칙에 추가됩니다. 광범위한 영향을 미칠 수 있으므로 매우 주의해야 합니다. 확실하지 않은 경우 정의된 값을 local_defines 에 대신 추가하세요.
|
implementation_deps
|
라벨 목록. 기본값은 deps 와 달리 이러한 라이브러리의 헤더 및 포함 경로 (및 모든 전이적 deps)는 이 라이브러리의 컴파일에만 사용되며 이 라이브러리에 종속된 라이브러리는 사용되지 않습니다. implementation_deps 로 지정된 라이브러리는 여전히 이 라이브러리에 종속된 바이너리 타겟에 연결됩니다.
현재 사용은 cc_라이브러리로 제한되며 |
include_prefix
|
문자열. 기본값은 이 속성을 설정하면 저장소 상대 경로 앞에 추가된 이 속성의 값에서 이 규칙의
|
includes
|
문자열 목록. 기본값은
'Makevariable' 대체가 적용됩니다.
각 문자열은 헤더는 srcs 또는 hdrs에 추가되어야 합니다. 그렇지 않으면 컴파일이 샌드박스 상태일 때 (기본값) 종속 규칙에 헤더를 사용할 수 없습니다. |
linkopts
|
문자열 목록. 기본값은 LINKOPTS 에 추가됩니다.
|
linkstamp
|
라벨. 기본값은 base 패키지에만 필요합니다.
|
linkstatic
|
부울. 기본값은 cc_binary 및 cc_test 의 경우: 바이너리를 정적 모드로 연결합니다. cc_library.linkstatic : 아래를 참고하세요.
기본적으로 이 옵션은
사용 설정되어 있고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 항상 사용자 라이브러리의 실행 파일을 연결하는 방법에는 세 가지가 있습니다.
|
local_defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되어 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
|
nocopts
|
문자열. 기본값은 COPTS (규칙의 copts 속성에 명시적으로 지정된 값 포함)은 이 규칙을 컴파일하기 위해 COPTS 에서 삭제됩니다.
이 속성은 거의 필요하지 않습니다.
|
strip_include_prefix
|
문자열. 기본값은 설정하면 규칙의 상대 경로인 경우 패키지 기준 경로로 사용됩니다. 절대 경로인 경우에는 저장소 기준 경로로 이해됩니다.
|
textual_hdrs
|
라벨 목록. 기본값은 이는 자체적으로 컴파일할 수 없는 헤더 파일을 선언하는 위치입니다. 즉, 유효한 코드를 빌드하려면 항상 다른 소스 파일에 텍스트 형식으로 포함해야 합니다. |
win_def_file
|
라벨. 기본값은 이 속성은 Windows가 대상 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다. |
cc_proto_library
규칙 소스 보기cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
는 .proto
파일에서 C++ 코드를 생성합니다.
deps
는 proto_library
규칙을 가리켜야 합니다.
예:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은 proto_library 규칙의 목록입니다.
|
cc_shared_library
규칙 소스 보기cc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
공유 라이브러리를 생성합니다.
예
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
예에서 foo_shared
는 foo
와 baz
를 정적으로 연결하는데, 후자는 전이 종속 항목입니다. bar
는 이미 dynamic_dep
bar_shared
에 의해 동적으로 제공되었으므로 연결하지 않습니다.
foo_shared
는 링커 스크립트 *.lds 파일을 사용하여 내보낼 기호를 제어합니다. cc_shared_library
규칙 로직은 내보낼 기호를 제어하지 않으며, 2개의 공유 라이브러리가 동일한 타겟을 내보내는 경우 분석 단계에서 오류를 발생시키기 위해 내보낸 것으로 가정되는 내용만 사용합니다.
cc_shared_library
의 모든 직접 종속 항목은 내보내기로 간주됩니다. 따라서 Bazel은 분석 중에 foo
를 foo_shared
에서 내보내고 있다고 가정합니다. baz
는 foo_shared
에서 내보내는 것으로 가정되지 않습니다. exports_filter
와 일치하는 모든 타겟도 내보내기로 간주됩니다.
예의 모든 단일 cc_library
는 최대 하나의 cc_shared_library
에 표시되어야 합니다. baz
를 bar_shared
에도 연결하려면 tags = ["LINKABLE_MORE_THAN_ONCE"]
를 baz
에 추가해야 합니다.
shared_lib_name
속성으로 인해 bar_shared
에서 생성된 파일의 이름은 기본적으로 Linux에서 사용하는 이름인 libbar.so
이 아닌 bar.so
이 됩니다.
오류
Two shared libraries in dependencies export the same symbols.
이는 동일한 대상을 내보내는 두 개의 cc_shared_library
종속 항목이 있는 대상을 만들 때마다 발생합니다. 이 문제를 해결하려면 cc_shared_library
종속 항목 중 하나에서 라이브러리 내보내기를 중지해야 합니다.
Two shared libraries in dependencies link the same library statically
이는 동일한 타겟을 정적으로 연결하는 두 개의 다른 cc_shared_library
종속 항목으로 새 cc_shared_library
를 만들 때마다 발생합니다.
내보내기 오류와 비슷합니다.
이 문제를 해결하는 한 가지 방법은 라이브러리를 cc_shared_library
종속 항목 중 하나로 연결하는 것을 중지하는 것입니다. 동시에 여전히 연결하는 개발자가 라이브러리를 내보내야 합니다. 그러면 라이브러리를 연결하지 않는 개발자가 기호에 대한 가시성을 유지할 수 있습니다. 또 다른 방법은 타겟을 내보내는 세 번째 라이브러리를 가져오는 것입니다.
세 번째 방법은 원인 cc_library
에 LINKABLE_MORE_THAN_ONCE
태그를 지정하는 것이지만 이 수정사항은 드물게 발생해야 하며 cc_library
이 두 번 이상 연결해도 안전한지 반드시 확인해야 합니다.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
즉, cc_shared_library
종속 항목 중 하나를 거치지 않고 deps
의 전이 클로저에 있는 라이브러리에는 이미 dynamic_deps
의 다른 cc_shared_library
에 연결되어 있으며 내보내지지 않습니다.
해결 방법은 cc_shared_library
종속 항목에서 내보내거나 이를 내보내는 세 번째 cc_shared_library
를 가져오는 것입니다.
Do not place libraries which only contain a precompiled dynamic library in deps.
사전 컴파일된 동적 라이브러리가 있는 경우 현재 생성 중인 현재 cc_shared_library
타겟에 정적으로 연결할 필요가 없으며 연결할 수도 없습니다. 따라서 cc_shared_library
의 deps
에 속하지 않습니다. 사전 컴파일된 동적 라이브러리가 cc_libraries
중 하나의 종속 항목인 경우 cc_library
가 이 라이브러리에 직접 종속되어야 합니다.
Trying to export a library already exported by a different shared library
현재 규칙에서 동적 종속 항목 중 하나에 의해 이미 내보내기 중인 대상을 내보내도록 소유권을 주장하면 이 오류가 표시됩니다.
이 문제를 해결하려면 deps
에서 타겟을 삭제하고 동적 종속 항목에서 사용하거나 exports_filter
가 이 타겟을 포착하지 않도록 하세요.
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은
이러한 직접 deps의 전이 라이브러리 종속 항목은
분석하는 동안 규칙 구현에서는 여러
또한 구현은 동일한 라이브러리가 둘 이상의 |
additional_linker_inputs
|
라벨 목록. 기본값은 user_link_flags 속성을 통해 이 작업을 수행할 수 있습니다.
|
dynamic_deps
|
라벨 목록. 기본값은 cc_shared_library 종속 항목입니다.
|
exports_filter
|
문자열 목록. 기본값은
모든 타겟
이 속성은 실제로 이러한 대상에 종속 항목 에지를 추가하지 않으며 대신 허용되는 구문은 다음과 같습니다. foo/BUILD의 모든 타겟을 처리하기 위한 foo/BUILD의 타겟 또는 foo/ bar/BUILD와 같이 foo/아래에 있는 다른 패키지의 타겟은 |
shared_lib_name
|
문자열. 기본값은 |
user_link_flags
|
문자열 목록. 기본값은 cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
라벨. 기본값은 이 속성은 Windows가 대상 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다. |
fdo_prefetch_hints
규칙 소스 보기fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
작업공간 또는 지정된 절대 경로에 있는 FDO 미리 가져오기 힌트 프로필을 나타냅니다. 예:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
profile
|
라벨. 기본값은 |
fdo_profile
규칙 소스 보기fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
작업공간 또는 지정된 절대 경로에 있는 FDO 프로필을 나타냅니다. 예:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
absolute_path_profile
|
문자열. 기본값은 |
profile
|
라벨. 기본값은 |
proto_profile
|
라벨. 기본값은 |
memprof_profile
규칙 소스 보기memprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
작업공간 또는 지정된 절대 경로에 있는 MEMPROF 프로필을 나타냅니다. 예:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
absolute_path_profile
|
문자열. 기본값은 |
profile
|
라벨. 기본값은 |
propeller_optimize
규칙 소스 보기propeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
작업공간의 프로펠러 최적화 프로필을 나타냅니다. 예:
propeller_optimize( name = "layout", cc_profile = "//path:cc_profile.txt", ld_profile = "//path:ld_profile.txt" ) propeller_optimize( name = "layout_absolute", absolute_cc_profile = "/absolute/cc_profile.txt", absolute_ld_profile = "/absolute/ld_profile.txt" )
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
ld_profile
|
라벨. 기본값은 |
cc_test
규칙 소스 보기cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, link_extra_lib, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
deps
|
라벨 목록. 기본값은
|
srcs
|
라벨 목록. 기본값은
모든 규칙의 이름이
허용되는
이러한 파일을 생성하는 모든 규칙을 확인할 수 있습니다. gcc 규칙에 따라 다른 확장 프로그램이 다른 프로그래밍 언어를 나타냅니다. |
additional_linker_inputs
|
라벨 목록. 기본값은 예를 들어 컴파일된 Windows .res 파일을 여기에서 제공하여 바이너리 타겟에 삽입할 수 있습니다. |
copts
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지에서 기능
|
defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되며 이 대상의 컴파일 명령줄과 이 대상에 종속되는 모든 규칙에 추가됩니다. 광범위한 영향을 미칠 수 있으므로 매우 주의해야 합니다. 확실하지 않은 경우 정의된 값을 local_defines 에 대신 추가하세요.
|
includes
|
문자열 목록. 기본값은
'Makevariable' 대체가 적용됩니다.
각 문자열은 헤더는 srcs 또는 hdrs에 추가되어야 합니다. 그렇지 않으면 컴파일이 샌드박스 상태일 때 (기본값) 종속 규칙에 헤더를 사용할 수 없습니다. |
link_extra_lib
|
라벨. 기본값은
기본적으로 C++ 바이너리는 |
linkopts
|
문자열 목록. 기본값은 LINKOPTS 에 추가됩니다.
|
linkstatic
|
부울. 기본값은 cc_binary 및 cc_test 의 경우: 바이너리를 정적 모드로 연결합니다. cc_library.linkstatic : 아래를 참고하세요.
기본적으로 이 옵션은
사용 설정되어 있고 바이너리 또는 테스트인 경우 이 옵션은 가능한 경우 항상 사용자 라이브러리의 실행 파일을 연결하는 방법에는 세 가지가 있습니다.
|
local_defines
|
문자열 목록. 기본값은 -D 가 앞에 추가되어 이 타겟의 컴파일 명령줄에 추가되지만 종속 항목에는 추가되지 않습니다.
|
malloc
|
라벨. 기본값은
기본적으로 C++ 바이너리는 빈 라이브러리인 |
nocopts
|
문자열. 기본값은 COPTS (규칙의 copts 속성에 명시적으로 지정된 값 포함)은 이 규칙을 컴파일하기 위해 COPTS 에서 삭제됩니다.
이 속성은 거의 필요하지 않습니다.
|
stamp
|
정수이며 기본값은
스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다. |
win_def_file
|
라벨. 기본값은 이 속성은 Windows가 대상 플랫폼인 경우에만 사용해야 합니다. 공유 라이브러리를 연결하는 동안 기호를 내보내는 데 사용할 수 있습니다. |
cc_toolchain
규칙 소스 보기cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
C++ 도구 모음을 나타냅니다.
이 규칙의 역할은 다음과 같습니다.
-
C++ 작업을 실행하는 데 필요한 모든 아티팩트 수집 이 작업은
all_files
,compiler_files
,linker_files
또는_files
로 끝나는 기타 속성과 같은 속성으로 이루어집니다. 가장 일반적으로는 필요한 모든 파일을 글로빙하는 파일 그룹입니다. -
C++ 작업에 올바른 명령줄 생성
CcToolchainConfigInfo
제공업체를 사용하면 됩니다 (아래 세부정보 참고).
toolchain_config
속성을 사용하여 C++ 도구 모음을 구성합니다.
자세한 C++ 도구 모음 구성 및 도구 모음 선택 문서는 이
페이지
를 참고하세요.
bazel build //...
를 호출할 때 도구 모음이 불필요하게 빌드 및 구성되지 않도록 하려면 tags = ["manual"]
를 사용합니다.
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
all_files
|
라벨, 필수 모든 cc_toolchain 아티팩트의 컬렉션입니다. 이러한 아티팩트는 모든 Rules_cc 관련 작업에 입력으로 추가됩니다 (아래 속성의 보다 정확한 아티팩트 세트를 사용하는 작업 제외). Bazel은all_files 가 아티팩트를 제공하는 다른 모든 속성의 상위 집합이라고 가정합니다 (예: linktamp 컴파일에는 컴파일 파일과 링크 파일이 모두 필요하므로 all_files 사용).
|
ar_files
|
라벨. 기본값은 보관처리 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
as_files
|
라벨. 기본값은 어셈블리 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
compiler_files
|
라벨, 필수 컴파일 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
compiler_files_without_includes
|
라벨. 기본값은 |
coverage_files
|
라벨. 기본값은 |
dwp_files
|
라벨, 필수 dwp 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
dynamic_runtime_lib
|
라벨. 기본값은 'static_link_cpp_runtimes' 기능이 사용 설정되고 종속 항목을 동적으로 연결할 때 사용됩니다. |
exec_transition_for_inputs
|
부울. 기본값은 |
libc_top
|
라벨. 기본값은 |
linker_files
|
라벨, 필수 연결 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
module_map
|
라벨. 기본값은 |
objcopy_files
|
라벨, 필수 objcopy 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
static_runtime_lib
|
라벨. 기본값은 'static_link_cpp_runtimes' 기능이 사용 설정되고 종속 항목을 정적으로 연결할 때 사용됩니다. |
strip_files
|
라벨, 필수 스트립 작업에 필요한 모든 cc_toolchain 아티팩트의 컬렉션입니다. |
supports_header_parsing
|
부울. 기본값은 |
supports_param_files
|
부울. 기본값은 |
toolchain_config
|
라벨, 필수 cc_toolchain_config_info 를 제공하는 규칙의 라벨입니다.
|
toolchain_identifier
|
문자열. 구성할 수 없음, 기본값은
#5380 문제가 해결될 때까지 이 방법은 |
cc_toolchain_suite
규칙 소스 보기cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
C++ 도구 모음 모음을 나타냅니다.
이 규칙의 역할은 다음과 같습니다.
- 모든 관련 C++ 도구 모음 수집
-
Bazel에 전달된
--cpu
및--compiler
옵션에 따라 하나의 도구 모음을 선택합니다.
자세한 C++ 도구 모음 구성 및 도구 모음 선택 문서는 이 페이지 를 참고하세요.
인수
특성 | |
---|---|
name |
이름: 필수 항목입니다. 이 대상의 고유한 이름입니다. |
toolchains
|
'<cpu>' 또는 '<cpu>|<compiler>' 문자열에서 cc_toolchain 라벨로 매핑됩니다. '<cpu>'는 --cpu 만 Bazel에 전달될 때 사용되며, --cpu 와 --compiler 가 모두 Bazel에 전달될 때 '<cpu>|<compiler>'이 사용됩니다. 예:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |