모듈과 패키지의 기본 개념

CMake에서 "모듈"과 "패키지"는 서로 다른 개념이지만, 빌드 시스템을 구성하고 관리하는 데 중요한 역할을 한다. 모듈(Module)은 보통 CMake의 기능을 확장하기 위해 사용되는 스크립트 파일이다. 반면에 패키지(Package)는 소프트웨어의 일부나 전부를 재사용 가능하게 배포하는 단위를 의미한다.

모듈은 일반적으로 프로젝트 내에서 특정 기능을 추가하거나 보조하는 역할을 한다. 예를 들어, 특정 라이브러리를 찾거나 설정하는 데 사용될 수 있다. CMake는 표준 모듈들을 제공하며, 이들은 CMake 설치 디렉토리의 Modules 폴더에 위치한다. 사용자는 필요에 따라 자신만의 모듈을 정의할 수도 있다.

패키지는 소프트웨어를 재배포하거나 다른 프로젝트에서 사용할 수 있도록 준비된 상태를 말한다. CMake에서 패키지는 주로 find_package() 명령어를 통해 찾고 사용할 수 있다. 패키지는 프로젝트 간의 의존성을 관리하는 데 중요한 역할을 한다.

CMake 모듈의 구조와 사용

CMake 모듈은 보통 .cmake 확장자를 가진 파일이다. 이 파일에는 CMake 명령어와 함수들이 포함되어 있으며, 특정 작업을 수행하기 위해 작성된다. 예를 들어, FindZLIB.cmake는 ZLIB 라이브러리를 찾기 위해 작성된 모듈이다.

모듈을 사용하려면 include() 명령어를 사용하여 CMakeLists.txt 파일에 포함시킨다. 예를 들어, include(FindZLIB)라고 하면, CMake는 FindZLIB.cmake 파일을 찾아 실행한다. 만약 CMake 표준 모듈에 포함되어 있지 않은 모듈을 사용하려면, 해당 모듈 파일의 경로를 CMake에 명시적으로 알려줘야 한다.

CMake 패키지의 구조와 사용

CMake 패키지는 주로 Config.cmake 또는 Find<name>.cmake 파일로 정의된다. 이 파일들은 패키지가 설치된 경로에서 찾아지며, find_package() 명령어를 통해 불러올 수 있다. 예를 들어, find_package(Boost)는 Boost 라이브러리를 찾기 위해 CMake가 BoostConfig.cmake 또는 FindBoost.cmake 파일을 찾도록 한다.

패키지는 보통 설치 시 CMake의 패키지 경로에 등록되거나, 사용자가 명시적으로 경로를 지정하여 CMake가 찾을 수 있도록 한다. 또한 패키지는 패키지 구성 파일에서 필요한 의존성과 설정을 정의하여, 사용자가 프로젝트에서 쉽게 가져다 사용할 수 있도록 한다.

모듈과 패키지의 차이점

모듈은 보통 프로젝트 내부에서 사용되며, 특정 작업을 자동화하거나 설정하는 데 사용된다. 모듈은 독립적으로 사용할 수 없으며, CMakeLists.txt 파일 내에서 불러와 사용해야 한다. 모듈은 보통 특정 프로젝트나 작업에 특화된 경우가 많다.

반면에 패키지는 프로젝트 간의 재사용을 위해 설계되었으며, 독립적인 단위로 배포된다. 패키지는 find_package() 명령어를 통해 불러오며, 필요한 모든 의존성과 설정을 포함하고 있다. 패키지는 주로 라이브러리나 소프트웨어 프레임워크와 같은 큰 단위로 사용된다.

CMake에서 모듈과 패키지의 통합 사용

CMake에서 모듈과 패키지는 상호 보완적으로 사용될 수 있다. 예를 들어, 패키지를 찾기 위해 모듈을 사용할 수 있으며, 패키지가 제공하는 기능을 확장하기 위해 모듈을 추가할 수도 있다.

패키지를 찾기 위해 find_package() 명령어를 사용할 때, 해당 패키지를 찾지 못하면 CMake는 해당 패키지를 찾기 위한 모듈을 실행할 수 있다. 이로 인해 패키지와 모듈 간의 유연한 통합이 가능하며, 프로젝트의 빌드 시스템을 더욱 강력하고 유연하게 만들 수 있다.


관련 자료: - CMake 공식 문서: https://cmake.org/documentation/ - Modern CMake 사용법 (책자 및 튜토리얼)