CMake 요리책
이 저장소는 Packt가 출판하고 Radovan Bast와 Roberto Di Remigio가 저술한 CMake Cookbook에 포함된 레시피의 소스를 수집합니다.
목차
1장: 간단한 실행 파일에서 라이브러리까지
- 1. 단일 소스 파일을 실행 파일로 컴파일
- 2. 스위칭 발전기
- 3. 정적 및 공유 라이브러리 구축 및 연결
- 4. 조건문으로 컴파일 제어하기
- 5. 사용자에게 옵션 제시
- 6. 컴파일러 지정
- 7. 빌드 유형 전환
- 8. 컴파일러 플래그 제어
- 9. 언어의 표준 설정
- 10. 제어 흐름 구성 사용
2장: 환경 감지
- 1. 운영체제 탐색
- 2. 플랫폼 종속 소스 코드 처리
- 3. 컴파일러 종속 소스 코드 처리
- 4. 호스트 프로세서 아키텍처 발견
- 5. 호스트 프로세서 명령어 세트 검색
- 6. Eigen 라이브러리에 대한 벡터화 활성화
3장: 외부 라이브러리 및 프로그램 감지
- 1. Python 인터프리터 감지
- 2. Python 라이브러리 감지
- 3. Python 모듈 및 패키지 감지
- 4. BLAS 및 LAPACK 수학 라이브러리 감지
- 5. OpenMP 병렬 환경 감지
- 6. MPI 병렬 환경 감지
- 7. 고유 라이브러리 감지
- 8. Boost 라이브러리 감지
- 9. 외부 라이브러리 감지: I.
pkg-config
사용 - 10. 외부 라이브러리 감지: II. 찾기 모듈 작성
4장: 테스트 생성 및 실행
- 1. 간단한 단위 테스트 만들기
- 2. Catch2 라이브러리를 사용하여 단위 테스트 정의
- 3. 단위 테스트 정의 및 Google 테스트에 대한 연결
- 4. 단위 테스트 정의 및 Boost 테스트에 대한 연결
- 5. 동적 분석을 사용하여 메모리 결함 감지
- 6. 예상되는 실패 테스트
- 7. 장기 테스트에 타임아웃 사용하기
- 8. 테스트를 병렬로 실행하기
- 9. 테스트 하위 집합 실행
- 10. 테스트 픽스처 사용
5장: 구성 시간 및 빌드 시간 작업
- 1. 플랫폼 독립적인 파일 작업 사용
- 2. 구성 시 사용자 정의 명령 실행
- 3. 빌드 시 사용자 정의 명령 실행: I.
add_custom_command
사용 - 4. 빌드 시 사용자 정의 명령 실행: II.
add_custom_target
사용 - 5. 빌드 시 특정 대상에 대한 사용자 정의 명령 실행
- 6. 컴파일 및 링크 조사
- 7. 컴파일러 플래그 조사
- 8. 프로빙 실행
- 9. 생성기 표현식을 사용한 미세 조정 구성 및 컴파일
6장: 소스 코드 생성
- 1. 구성 시 소스 생성
- 2. Python을 사용하여 구성 시 소스 코드 생성
- 3. Python을 사용하여 빌드 시 소스 코드 생성
- 4. 재현성을 위해 프로젝트 버전 정보 기록
- 5. 파일에서 프로젝트 버전 기록
- 6. 구성 시 Git 해시 기록
- 7. 빌드 시 Git 해시 기록
7장: 프로젝트 구조화
- 1. 함수 및 매크로를 사용한 코드 재사용
- 2. CMake 소스를 모듈로 분할
- 3. 컴파일러 플래그를 테스트하고 설정하는 함수 작성
- 4. 명명된 인수로 함수 또는 매크로 정의
- 5. 함수와 매크로 재정의
- 6. 함수, 매크로, 변수 지원 중단
- 7.
add_subdirectory
로 범위 제한 - 8.
target_sources
사용하여 전역 변수 피하기 - 9. Fortran 프로젝트 구성
8장: 슈퍼빌드 패턴
- 1. 슈퍼빌드 패턴 사용
- 2. 슈퍼빌드로 종속성 관리: I. Boost 라이브러리
- 3. 슈퍼빌드로 종속성 관리: II. FFTW 라이브러리
- 4. 슈퍼빌드로 종속성 관리: III. Google 테스트 프레임워크
- 5. 프로젝트를 슈퍼빌드로 관리하기
9장: 혼합 언어 프로젝트
- 1. C/C++ 라이브러리를 사용하는 Fortran 프로젝트 빌드
- 2. Fortran 라이브러리를 사용하는 C/C++ 프로젝트 빌드
- 3. Cython을 사용하여 C++ 및 Python 프로젝트 빌드
- 4. Boost.Python을 사용하여 C++ 및 Python 프로젝트 빌드
- 5. pybind11을 사용하여 C++ 및 Python 프로젝트 빌드
- 6. Python CFFI를 사용하여 C, C++, Fortran 및 Python 혼합
10장: 설치 프로그램 작성
- 1. 프로젝트 설치
- 2. 내보내기 헤더 생성
- 3. 타겟 내보내기
- 4. 슈퍼빌드 설치
11장: 프로젝트 패키징
- 1. 소스 및 바이너리 패키지 생성
- 2. PyPI를 통해 CMake/pybind11로 빌드된 C++/Python 프로젝트 배포
- 3. PyPI를 통해 CMake/CFFI로 빌드된 C/Fortran/Python 프로젝트 배포
- 4. 간단한 프로젝트를 Conda 패키지로 배포
- 5. 종속성이 있는 프로젝트를 Conda 패키지로 배포
12장: 문서 작성
- 1. Doxygen을 사용하여 문서 작성
- 2. Sphinx를 사용하여 문서 작성
- 3. Doxygen과 Sphinx의 결합
13장: 대체 생성기와 크로스 컴파일
- 1. Hello World 예제 크로스 컴파일
- 2. OpenMP 병렬화를 사용하여 Windows 바이너리 크로스 컴파일
14장: 대시보드 테스트
- 1. CDash 대시보드에 테스트 배포
- 2. CDash 대시보드에 테스트 적용 범위 보고
- 3. AddressSanitizer 사용 및 CDash에 메모리 결함 보고
- 4. ThreadSanitizer 사용 및 CDash에 데이터 경합 보고
15장: 프로젝트를 CMake로 포팅하기