TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 33 READS

CMake 없이 C 라이브러리 빌드하기 — C/C++를 Zig로 패키징하는 allyourcodebase

C나 C++ 라이브러리를 내 프로젝트에 붙여본 적 있다면 다들 한 번쯤 겪어봤을 거예요. autotools, CMake, 플랫폼별 의존성 지옥... 라이브러리 코드보다 빌드 설정과 싸우는 시간이 더 길죠. 오늘 소개할 allyourcodebase는 이 문제를 재미있는 방법으로 풀고 있는 GitHub 조직이에요. 유명 C/C++ 프로젝트들을 Zig 빌드 시스템으로 다시 패키징해서, 명령어 하나로 빌드되게 만들어놨거든요. 이름은 옛날 밈 'All your base are belong to us'에서 따온 말장난이고요.

Zig가 왜 여기서 나와요?

Zig는 C를 대체하려는 시스템 프로그래밍 언어인데, 사실 언어보다 먼저 유명해진 게 툴체인이에요. Zig를 설치하면 clang 기반의 C/C++ 컴파일러가 통째로 딸려 오는데, 이게 물건이거든요. zig cc라는 명령으로 기존 C 컴파일러를 그대로 대체할 수 있는데, 크로스 컴파일이 그냥 돼요. 크로스 컴파일이 뭐냐면, 맥에서 리눅스 ARM용 바이너리를 만드는 것처럼 다른 운영체제·CPU용 실행 파일을 빌드하는 건데, 보통은 크로스 툴체인 구축에만 한나절이 걸리는 일이에요. Zig는 주요 플랫폼의 libc 헤더와 라이브러리를 내장하고 있어서 -target 옵션 하나만 붙이면 끝나요. Uber가 Go 서비스의 크로스 컴파일에 zig cc를 도입해서 화제가 됐던 것도 이 때문이었죠.

여기에 Zig에는 공식 패키지 매니저도 있어요. build.zig.zon이라는 파일에 의존성의 URL과 해시를 적으면 알아서 받아오고, 해시로 검증하니까 어디서 빌드해도 같은 결과가 나오는 재현 가능한 빌드가 돼요.

allyourcodebase가 하는 일

이 조직은 ffmpeg, SQLite, OpenSSL, curl, zlib 같은 굵직한 C/C++ 프로젝트들의 빌드를 Zig의 build.zig로 옮겨놨어요. 원본 소스 코드는 그대로 두고, autotools나 CMake가 하던 일(컴파일 플래그 관리, 플랫폼별 분기, 설정 헤더 생성)을 Zig 빌드 스크립트로 번역한 거예요. 사용하는 쪽에서는 의존성 한 줄 추가하고 zig build만 치면 해당 라이브러리가 소스부터 빌드돼요. 시스템에 CMake도, pkg-config도, 심지어 별도의 C 컴파일러도 필요 없어요. Zig 하나면 끝이에요. 그리고 이게 Zig 사용자만을 위한 건 아니에요. Zig 빌드 시스템은 순수 C/C++ 프로젝트의 빌드 도구로도 쓸 수 있어서, C 프로젝트가 CMake 대신 Zig를 채택하는 사례도 조금씩 나오고 있거든요.

기존 도구들과 비교하면

C/C++ 패키지 관리 문제를 푸는 시도는 전부터 있었어요. Microsoft의 vcpkg, Conan이 대표적이고, 구글 계열에서는 Bazel로 격리된 빌드를 해왔죠. 차이가 있다면, vcpkg나 Conan은 기존 빌드 시스템을 감싸는 방식이라 그 밑의 복잡함이 그대로 남아 있는데, Zig 방식은 빌드 로직 자체를 다시 쓰는 접근이에요. 패키징하는 사람의 손이 많이 가는 대신, 쓰는 사람은 크로스 컴파일과 재현성을 공짜로 얻어요. 약점도 분명한데, Zig가 아직 1.0 이전이라 빌드 API가 버전마다 바뀌어요. 패키지들이 Zig 버전을 따라가며 계속 업데이트돼야 하니, 커뮤니티의 꾸준한 관리에 기대는 구조인 거죠.

실무에서 써먹을 지점

당장 Zig를 배우지 않아도 얻어갈 게 있어요. CGO가 포함된 Go 프로젝트나 C 확장이 있는 프로젝트를 다른 플랫폼용으로 빌드해야 할 때, CC='zig cc -target x86_64-linux-gnu' 같은 식으로 컴파일러만 바꿔치기하는 건 오늘 바로 써볼 수 있는 기술이고요. 도커로 멀티 아키텍처 이미지를 빌드하면서 QEMU 에뮬레이션의 느린 속도를 참고 있었다면, 네이티브 크로스 컴파일로 빌드 시간을 크게 줄일 수도 있어요. C 라이브러리를 임베딩해야 하는 프로젝트가 있다면 allyourcodebase에 이미 패키징된 게 있는지 먼저 확인해보시고요.

정리하면, allyourcodebase는 'C/C++ 빌드의 고통을 Zig 툴체인으로 우회하자'는 실용적인 실험이에요. 여러분은 C/C++ 의존성 때문에 고생한 경험 중 어떤 게 최악이었나요? 그리고 빌드 도구로서의 Zig, 어떻게 보세요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/allyourcodebase
SHARE
처리 중...