"많은, 그리고 그들은 끔찍하다"+1
그러나 "가장 풍부하고 확장 성"은 아마도 Makefile 생성기 인 CMake 일 것입니다 (기본 MSVC ++ *.proj
/ 생성 *.sln
). 이상한 구문이지만 일단 배우면 다른 플랫폼에 대한 빌드를 멋지게 생성 할 수 있습니다. "새로 시작한"경우을 사용 CMake
합니다. "코드 생성"은 원하는 작업에 따라 빌드 시스템을 넘어 "자신의 생명"을 취할 수 있지만 목록을 처리해야합니다. (아래 참조)
간단한 프로젝트의 경우 QMake 생성기는 정상 입니다 ( QMake 를 사용하기 위해 Qt 라이브러리를 사용할 필요는 없습니다). 그러나 "간단한"설명은 아닙니다. 코드 생성 및 "추가 단계 (extra-phases)"는 (또는 ) CMake
와 같은 자체 확장을위한 풍부한 API를 원할 수도 있습니다.Scons
Waf
우리 는 직장에서 스콘 을 사용 합니다. "글 머리 기호 방지 빌드"를 생성하지만 실제로 느립니다. 다른 시스템은 방탄하지 않습니다 Scons
. 그러나 느립니다. 파이썬으로 작성되었으며 "작업 공간 구성"(모듈 종속성 만 지정)에 대한 인터페이스를 확장했으며 이는 Scons
디자인 의도 (Python을 통한 이러한 유형의 확장)의 일부입니다. 편리하지만 빌드 속도가 느립니다. 방탄 빌드 (모든 개발자 상자가 최종 릴리스를 만들 수 있음)를 얻지 만 속도가 느립니다. 그리고 느립니다. Scons
그러나 를 사용하면 느리다는 것을 잊지 마십시오 . 그리고 느립니다.
2000 년 이후 10 년이 지났지 만 여전히 비행 용 차량이 없다고 생각합니다. 우리는 아마 그것을 얻기 위해 또 다른 백년을 기다려야 할 것입니다. 그리고 우리는 아마도 여전히 크 래피 빌드 시스템으로 건설중인 비행 자동차에서 날아갈 것입니다 .
예, 모두 끔찍합니다.
[코드 생성에 대하여]
Scons
"단계"에서 작동하며 "정적"입니다. 빌드의 일부로 생성 된 코드를 빌드 할 수 있지만 (사람들은 몇 가지 다른 방식으로이 작업을 수행함) "매우 스콘과 매우 유사한 것"으로 설명되었습니다.
"일부 파일을 전처리하고 소스 파일을 생성"하는 것이 간단하다면 큰 문제는 없습니다 (많은 옵션이 있으며 이것이 파일 qmake
의 moc
전처리를 위해 작성된 이유 입니다 *.hpp/*.cpp
).
그러나 "무거운 사람"에서이 작업을 수행하는 경우 직접 스크립트를 작성해야합니다. 예를 들어, 데이터베이스를 쿼리하고 "계층"(전통적인 3 계층 응용 프로그램 개발) 사이의 인터페이스를 위해 C ++ 클래스를 생성하는 일부 구성 형 스크립트가있었습니다. 마찬가지로 IDL을 통해 서버 / 클라이언트 소스 코드를 생성하고 여러 버전의 클라이언트 / 서버가 서로 다른 버전 (동일한 "클라이언트"또는 "서버")과 동시에 실행될 수 있도록 포함 된 버전 정보를 생성했습니다. 생성 된 소스 코드가 많습니다. 우리는 "빌드 시스템"을 "가장"만들 수 있지만, 실제로는 "구성 관리"를위한 사소한 인프라이며, 그 중 일부는 "빌드 시스템"입니다. 예를 들어이 시스템은 "테이크 다운"및 "