규칙
- 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
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지가 feature
|
defines
|
문자열 목록. 기본값은 -D 가 추가되고, 이 타겟 및 이에 의존하는 모든 규칙에 대한 컴파일 명령줄에 추가됩니다. 너무 광범위한 영향을 미칠 수 있으니 주의하세요. 확실하지 않으면 대신 정의 값을 local_defines 에 추가하세요.
|
includes
|
문자열 목록. 기본값은
'Make 변수' 대체 적용
각 문자열 앞에 헤더는 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
|
부울. 기본값은 알려진 문제로 인해 Alwayslink가 Windows의 VS 2017에서 작동하지 않는 경우 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 에 나열된 파일의 모든 객체 파일에서 링크됩니다.
이는 코드가 바이너리의 코드에 의해 명시적으로 호출되지 않는 경우(예: 코드가 일부 서비스에서 제공하는 일부 콜백을 수신하도록 등록되는 경우) 유용합니다.
알려진 문제로 인해 Alwayslink가 Windows의 VS 2017에서 작동하지 않는 경우 VS 2017을 최신 버전으로 업그레이드하세요. |
copts
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지가 feature
|
defines
|
문자열 목록. 기본값은 -D 가 추가되고, 이 타겟 및 이에 의존하는 모든 규칙에 대한 컴파일 명령줄에 추가됩니다. 너무 광범위한 영향을 미칠 수 있으니 주의하세요. 확실하지 않으면 대신 정의 값을 local_defines 에 추가하세요.
|
implementation_deps
|
라벨 목록. 기본값은 deps 와 달리 이러한 라이브러리의 헤더와 포함 경로 (및 모든 전이 deps)는 이 라이브러리의 컴파일에만 사용되며 라이브러리에 종속된 라이브러리는 사용되지 않습니다. implementation_deps 로 지정된 라이브러리는 이 라이브러리에 종속되는 바이너리 타겟에 계속 링크됩니다.
지금은 cc_library만 사용 가능하며 |
include_prefix
|
문자열. 기본값은 설정되면 이 규칙의
|
includes
|
문자열 목록. 기본값은
'Make 변수' 대체 적용
각 문자열 앞에 헤더는 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
규칙 로직은 내보낼 기호를 제어하지 않으며, 두 개의 공유 라이브러리가 동일한 타겟을 내보내는 경우 분석 단계에서 오류가 발생하기 위해 내보내는 것으로 추정되는 기호만 사용합니다.
cc_shared_library
의 모든 직접 종속 항목은 내보내기로 간주됩니다. 따라서 Bazel은 분석 중에 foo_shared
가 foo
를 내보내는 것으로 가정합니다. 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
|
문자열 목록. 기본값은
모든 타겟
이 속성은 실제로 이러한 타겟에 종속 항목 에지를 추가하지 않으므로 종속 항목 에지는 대신 다음 구문이 허용됩니다.
|
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
|
문자열 목록. 기본값은
이 속성의 각 문자열은 바이너리 타겟을 컴파일하기 전에 지정된 순서대로
패키지가 feature
|
defines
|
문자열 목록. 기본값은 -D 가 추가되고, 이 타겟 및 이에 의존하는 모든 규칙에 대한 컴파일 명령줄에 추가됩니다. 너무 광범위한 영향을 미칠 수 있으니 주의하세요. 확실하지 않으면 대신 정의 값을 local_defines 에 추가하세요.
|
includes
|
문자열 목록. 기본값은
'Make 변수' 대체 적용
각 문자열 앞에 헤더는 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_툴체인 아티팩트 컬렉션입니다. 이러한 아티팩트는 모든 rules_cc 관련 작업에 입력으로 추가됩니다 (아래 속성의 아티팩트 집합을 더 정밀하게 사용하는 작업은 제외). Bazel은all_files 가 아티팩트를 제공하는 다른 모든 속성의 상위 집합이라고 가정합니다 (예: linkstamp 컴파일에는 컴파일과 링크 파일이 모두 필요하므로 all_files 가 필요함).
|
ar_files
|
라벨. 기본값은 보관처리 작업에 필요한 모든 cc_Tools 아티팩트 컬렉션입니다. |
as_files
|
라벨. 기본값은 어셈블리 작업에 필요한 모든 cc_Tools 아티팩트 컬렉션입니다. |
compiler_files
|
라벨, 필수 컴파일 작업에 필요한 모든 cc_툴체인 아티팩트의 컬렉션입니다. |
compiler_files_without_includes
|
라벨. 기본값은 |
coverage_files
|
라벨. 기본값은 |
dwp_files
|
라벨, 필수 dwp 작업에 필요한 모든 cc_Tools 아티팩트의 컬렉션입니다. |
dynamic_runtime_lib
|
라벨. 기본값은 이는 'static_link_cpp_runtimes' 기능이 사용 설정되고 종속 항목을 동적으로 연결할 때 사용됩니다. |
exec_transition_for_inputs
|
부울. 기본값은 |
libc_top
|
라벨. 기본값은 |
linker_files
|
라벨, 필수 연결 작업에 필요한 모든 cc_툴체인 아티팩트의 컬렉션입니다. |
module_map
|
라벨. 기본값은 |
objcopy_files
|
라벨, 필수 objcopy 작업에 필요한 모든 cc_툴체인 아티팩트의 컬렉션입니다. |
static_runtime_lib
|
라벨. 기본값은 이는 'static_link_cpp_runtimes' 기능이 사용 설정되고 종속 항목이 정적으로 연결될 때 사용됩니다. |
strip_files
|
라벨, 필수 스트립 작업에 필요한 모든 cc_툴체인 아티팩트의 컬렉션입니다. |
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>'는 --cpu 및 --compiler 가 모두 Bazel에 전달될 때 사용됩니다. 예:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |