개요
bazel 빌드 시스템 자신이 만든 파일에 의존성을 설정하면, 소스 트리과 대응하는 generated directory를 include directory로 추가할 필요가 있다. 현재 소스 경로를 추가하면, 대응하는 generated directory로 함께 자동으로 추가된다. 즉 generated directory가 아닌 대응하는 소스 경로를 추가해야 한다.
소스 경로를 추가하면 소스 경로 다음에 generated directory를 추가된다는 사실을 컴파일러 파라미터 정보 파일을 열어 보면 확인할 수 있다. 등록 순서에 영향으로 같은 파일이 존재하면 소스 트리에 포함된 파일을 먼저 고려한다.
src/BUILD.bazel 파일
코딩 의도는 단순한다. src 폴더에서 x.h 파일을 생성하고, cc_libary
나 cc_binary
에서 사용하려 한다. 일단 직접적으로 generated file를 cc_binary
에서 사용할 수 없다. 대신 cc_library
에 사용하고, cc_libary
를 cc_binary
에서 사용하는 구조로 사용해야 한다.
#src/BUILD.bazel
genrule(
name = "gen_header",
srcs = [],
outs = ["x.h"],
cmd = """echo '#define STR "TEST"
int sum(int, int);// GENDIR: $(GENDIR)' > $@""",
)
cc_library(
name = "lib",
srcs = ["x.cc"],
hdrs = [":gen_header"],
includes = ["."]
)
cc_binary(
name = "main",
srcs = ["main.cc"],
deps = [":lib"],
)
생성된 x.h 파일은 아래와 같다.
#define STR "TEST"
int sum(int, int);// GENDIR: bazel-out/x64_windows-fastbuild/bin
cc_library
에서 hdrs
항목에 genrule 이름을 적어주면 의존성이 설정하고 includes 항목에 자신의 경로, 즉 "."를 추가하면, 대응하는 generated directory도 추가되기 때문에 x.h 형태로 곧바로 사용 수 있다.
//src/x.cc
#include <x.h>
#include <iostream>
int sum(int a, int b) { std::cout << "STR:" << STR <<" sum:" << ( a + b) <<"\n"; return a + b ; }
cc_binary
는 cc_library
의 name을 deps
항목에 적어주면, cc_library
의 includes 항목이 그대로 전파됨으로 그냥 x.h 형태로 사용할 수 있다.
//src/main.cc
#include <x.h>
#include <iostream>
int main( int argc, char** argv) {
sum(100,200);
std::cout << "STR:" << STR << " main\n";
return 0;
}
실행 결과
빌드하기
CMD> bazelisk build //...
INFO: Analyzed 3 targets (0 packages loaded, 0 targets configured).
INFO: Found 3 targets...
INFO: Elapsed time: 0.100s, Critical Path: 0.01s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
실행하기
CMD> bazelisk run //src:main
INFO: Analyzed target //src:main (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src:main up-to-date:
bazel-bin/src/main.exe
INFO: Elapsed time: 0.115s, Critical Path: 0.01s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
INFO: Running command line: bazel-bin/src/main.exe
STR:TEST sum:300
STR:TEST main
예제 파일
'building system > bazel' 카테고리의 다른 글
nasm_library 구현해보기 (0) | 2024.02.20 |
---|---|
msvc 환경에서 bazel /MD 모드로 컴파일하기 (1) | 2024.02.01 |
platforms module 사용하기 (0) | 2024.01.29 |
dependency attribute란? (0) | 2024.01.27 |
StarLark 언어로 만들어 보는 기본 예제 MD5 파일 생성하기 (1) | 2024.01.24 |