만들 수있는 유망한 대안? [닫은]


83

나는 수년 동안 make와 makefile을 사용해 왔고, 개념은 건전하지만 구현은 원하는 것이 있습니다.

문제를 지나치게 복잡하게하지 않는 좋은 대안을 찾은 사람이 있습니까?


대답은 문제가 무엇인지에 따라 크게 달라지지 않습니까? 내가 시도한 것들은 make너무 단순합니다.
reinierpost

루비 레이크, 커피 스크립트 케이크, 파이썬 SCons는, 자바 개미 / 메이븐, C # MSBuild를 크로스 플랫폼 CMake
FilBot3


makefile은 간결하지만 자체 언어입니다. 디버깅하기가 어려웠습니다. 파이썬 사용자에게는 scons, luigi(적응 shouldsee/luck) snakemake,, waf. 많은 Java 대안이 있지만이 공간은 너무 작아서 모두 적어 둘 수 없습니다.

아직 시도해 보지 않았지만 github.com/casey/ 는 "상세한 오류 메시지를 생성하고 make의 특이성을 방지하므로 makefile을 디버깅하는 것이 makefile을 디버깅하는 것보다 더 쉽고 덜 놀랍지 않습니다"라는 다소 유망한 것처럼 들립니다.
Dr. Jan-Philip Gehrcke

답변:


30

SCons를 확인하십시오 . 예를 들어 Doom 3과 Blender는 그것을 사용합니다.


+1 for scons-개념적으로 충분히 유사하여 머리를 쉽게 돌릴 수 있지만 make에 대해 더 심하게 깨진 부분 (예 : 이름의 공백 처리)을 수정합니다.

5
SCons는 Python 2 전용이며, 며칠을 낭비한 후 SCons를 사용하여 Python 및 C ++로 작성된 프로젝트의 Python 3 버전을 컴파일 한 후 사람들에게 멀리 떨어져있는 것이 좋습니다. CMake 만 사용하면이 시점에서 C ++의 표준이되고 있습니다. 또는 Python 기반 빌드 시스템을 사용하려면 Meson을 사용하십시오 . 빠르게 실행되고 적극적으로 개발되고 있으며 SCons에서는 말할 수 없습니다.
ostrokach

SCons는 2017 년 9 월 (위의 주석이 작성된 후 5 개월)부터 Python 3을 지원 했으며 버전 4.0 (2020 년 7 월) 이후 에만 Python 3 입니다.
Michael Platings

27

크로스 플랫폼 개발을 위해 CMake로 맹세하는 많은 친구들이 있습니다.

http://www.cmake.org/

크로스 플랫폼 Python, Tcl 및 Java 바인딩이있는 C ++ 라이브러리 인 VTK에 사용되는 빌드 시스템 입니다. 아마도 그 많은 기능으로 찾을 수있는 가장 덜 복잡한 일이라고 생각합니다.

항상 표준 autotools를 사용해 볼 수 있습니다. Automake 파일은 Unix에서만 실행하고 C / C ++를 고수하는 경우 매우 쉽게 조합 할 수 있습니다. 통합은 더 복잡하며 autotools는 가장 단순한 시스템과는 거리가 멀습니다.


9
CMake는 여전히 makefile을 생성합니다. 따라서 GNU Make 구현의 문제가 원하는 작업을 수행 할 수 없다는 것이라면 CMake가 도움이되지 않을 것입니다. 또는 자동 도구입니다.

15
CMake는 메이크 파일 만 생성하지 않습니다. CMake는 수많은 컴파일러 및 플랫폼을 대상으로하는 다양한 종류의 빌드 파일을 생성 할 수 있습니다. 개인적으로 구성 구문이 절대적으로 역겨워서 CMake가 싫습니다.
Taywee

19

doit 은 파이썬 도구입니다. 빌드 도구의 개념을 기반으로하지만 더 일반적입니다.

  • 작업 / 규칙이 최신 상태인지 정의 할 수 있습니다 (타임 스탬프 확인뿐만 아니라 대상 파일이 필요하지 않음).
  • 종속성은 다른 작업에 의해 동적으로 계산 될 수 있습니다.
  • 작업의 동작은 파이썬 함수 또는 쉘 명령 일 수 있습니다.

1
당신이 대답, 놀라운 도구와 같은 작은 동전 모양 감사합니다
Bedros

16

일부 그놈 프로젝트는 waf 로 마이그레이션되었습니다 .

Scons와 같이 Python 기반이지만 독립 실행 형이므로 다른 개발자가 좋아하는 빌드 도구를 설치하도록 요구하는 대신 독립 실행 형 빌드 스크립트를 프로젝트에 복사하기 만하면됩니다.


14

Rake를 사용하는 것이 좋습니다 . 내가 찾은 가장 쉬운 도구입니다.

내가 사용한 다른 좋은 도구는 Ruby가 당신의 것이 아니라면 다음과 같습니다.

  • AAP (Python)
  • SCons (Python)
  • Ant (Java, XML 구성, 매우 복잡함)

7

의주의 ninja에 의해 영향을 받는다 빌드 도구 (v1.8.2 2017년 9월) tupredo.

빌드 파일 생성기 cmake(예 : Unix Makefiles, Visual Studio, XCode, Eclipse CDT 등)는 ninja버전 2.8.8 (2012 년 4 월)부터 빌드 파일을 생성 할 수도 있으며, ninja이제 afaik 은 cmake.

make도구 보다 성능이 뛰어납니다 (더 나은 종속성 추적 및 병렬화 됨).

cmake이미 확립 된 도구입니다. 구성 파일을 수정하지 않고 나중에 언제든지 빌드 도구를 선택할 수 있습니다. 따라서 향후 지원 될 더 나은 빌드가 개발되면 cmake편리하게 전환 할 수 있습니다.

c / c ++의 경우 컴파일 시간을 개선하는 것은 전처리기를 통해 포함 된 헤더 (특히 boost & eigen 과 같은 헤더 전용 라이브러리를 사용하는 경우 )로 인해 제한 될 수 있습니다. 이는 모듈 제안 (기술 검토에서 C ++ 11 또는 결국 C ++ 1y). 이 문제에 대한 자세한 내용은 이 프레젠테이션 을 확인하십시오 .


3
특히 퓨즈 커널 확장이 실행되고 tup있는지에 따라 달라집니다 fuse. redo2 년 동안 업데이트되지 않았습니다. 추천 ninja합니다.
mxcl 2013-04-09

5

나는 makefile과 같은 것을 읽고 쓰기를 매우 쉽게 만들려고하는 이라는 도구를 썼다 .


흥미 롭다. 하지만 왜 사케가“읽고 쓰기”가 더 쉽다고 생각하는지에 대한 정보를 조금 제공해 주시겠습니까? 질문에 대한 답을보기 위해 프로젝트를 설치할 필요는 없습니다.
Dour High Arch

확실한! 그것은 원래 질문의 작성자가 Make의 구현 "문제를 과도하게 복잡하게 만드는"것에 대해 우려했던 이유의 일부처럼 들렸습니다. 이는 makefile의 모호한 구문 때문이었습니다. Sake는 YAML로 작성된 파일을 사용하며, 다른 사람의 입력에서 수집 한 내용에서 훨씬 더 쉽게 읽고 쓸 수 있습니다.
tonyfischetti 2014 년

YAML 구문을 사용한다는 사실은 아마도 YAML이 make구문 과 어떻게 대조되는지에 대한 약간의 정교함과 함께 답의 일부가되어야 합니다.
Aaron Novstrup 2014 년

방금 빌드 스크립트에 Sake를 사용했는데 굉장합니다. 써 주셔서 감사합니다!
nooblar

술은 놀랍도록 간단합니다.
Dan

4

그것은 당신이하려는 일에 달려 있습니다. 경우 모든 당신이 원하는이 메이크업 스타일의 타겟 종속성 및 명령 호출을하고, 다음 만들기 실제로 작업에 대한 더 나은 도구 중 하나입니다. :-) Rake는 매우 훌륭하지만 간단한 경우에는 어색 할 수 있습니다. Ant는 물론 장황한 도시이지만 Java와 유사한 언어 (Scala 및 Groovy 포함) 빌드를 더 잘 지원합니다. 또한 Ant는 모든 곳에서 사용할 수 있습니다 . 그것이 내가 그것을 사용하는 주된 이유입니다. Windows에서 일관되게 작동하기 때문에 실제로 Make보다 더 많은 크로스 플랫폼입니다.

Java와 유사한 라이브러리에 대한 종속성 관리를 원한다면 Maven이 표준 선택이지만 개인적으로 Buildr가 훨씬 좋습니다. 더 빠르고 쉽게 사용자 정의 할 수 있습니다 (Rake 기반). 불행히도 아직 Maven만큼 유비쿼터스하지는 않습니다.



2

나는 많은 대안을 고려한 후에도 여전히 make를 선호합니다. 컴파일러 또는 fastdep과 같은 것을 통해 종속성을 자동 생성하면 할 일이별로 없습니다. 특히 빌드 스크립트가 구현 언어에 연결되는 것을 원하지 않으며 더 읽기 쉬운 대안이있을 때 XML로 작성하는 것을 좋아하지 않습니다. 범용 언어를 노출하는 도구는 장점이 있지만 다른 해석 언어는 그렇지 않습니다 (afaik). Make의 문제점은 무엇입니까? make에서 벗어나는 것에 대한 귀하의 관점에 호소 할 수 있습니다.

/ 앨런


나는 또한 Make를 선호한다. 늪지 표준이며 어디서나 사용할 수 있으며 프로젝트를 처음 접하는 사람이 이전에 사용했을 가능성이 합리적입니다 (또는 적어도 다른 것보다 더 좋은 기회). 그러나. 저는 Visual C ++ 용으로 작성된 대규모 코드베이스 (수천 개의 C ++ 소스 파일)를 가지고 있으며 Linux에서 GCC로 빌드하려고합니다. Make는 빌드 도구에 대한 확실한 선택으로 보였고 vcxproj 파일을 구문 분석하고 Makefile을 생성하는 빠르고 더러운 변환기를 작성했습니다. 이름에 공백이있는 프로젝트에서 시도하기 전까지는 모두 훌륭했습니다. 우리는 무엇을해야 하는가?

기록을 위해 저는 SCons로 끝났습니다. 어쨌든 우리의 변환기는 Python으로 작성 되었기 때문에 대신 SConscript로 변환하는 것이 매우 쉬웠습니다.

@Tom vcxproj 파일 파서의 사본을 어디서 구할 수 있습니까? 나도 Windows에서 작은 프로젝트를 진행 중이며 우분투로 이식하고 싶습니다.
Dan

@Maverick-내 사과, 그것은 독점적이었고 더 이상 거기에서 일하지 않습니다. 복잡한 빌드 시스템에서는이를 재현하는 것이 사소한 일이 아닙니다. VS 작업 영역 파일은 "단순한 XML"이며 빌드 할 소스 파일과 적용 할 옵션을 파악하는 것은 그리 끔찍하지 않은 일이지만 빌드 구성 (디버그, 릴리스)을 고려해야하며 솔루션 및 개별 프로젝트가 또한 임의의 다른 msbuild 파일을 가져옵니다. 우리가 고려한 또 다른 옵션은 msbuild를 사용하여 GCC를 대상으로하는 것이 었는데, 그 이후로 msbuild가 많이 성숙해 졌기 때문에 이제 더 쉽게 찾을 수 있습니다.

1

RTDA의 FlowTracer는 대규모 환경 (수만 개의 작업)에서 상업적으로 사용되는 또 다른 좋은 선택입니다. http://www.rtda.com/flowtracer-design-flow-infrastructure-software

작업에 대한 색상 코드 상자와 파일에 대한 타원이있는 종속성 그래프를 보여주는 GUI가 있습니다. 작업 및 파일 수가 많아지면 FlowTracer와 같은 GUI 기반 도구가 매우 중요합니다.

초기 설정 비용은 Make보다 높습니다. 이를 사용하여 첫 번째 흐름을 설정하기위한 학습 곡선이 있습니다. 그 후에는 더 빨라집니다.


0

여기서 올바른 질문을하고 있는지 잘 모르겠습니다.

당신은 단순화 된 만들기를 원하십니까? 이 경우 make에 매우 익숙한 사람이 문제를 단순화 할 일련의 (M | m) akefile을 생성해야합니다.

아니면 기본 기술을보고 싶습니까? 코드 디자인에 내장되고 적용되는 계약 별 설계 유형 아키텍처를 적용하고 싶습니까? 아니면 언어 자체, 예를 들어 Ada 및 사양 (인터페이스) 및 본문 (구현)의 개념?

당신이 추구하는 방향은 그러한 질문의 잠재적 인 결과에 확실히 영향을 미칠 것입니까?

기본적으로 실제로 변경된 구성 요소만으로 시스템을 구축하는 새로운 방법과 설계에 의해 내장 된 메커니즘을 가진 새로운 기술을 채택하는 것입니다.

직접적인 대답이 아니에요. 어떤 길을 가고 싶은지 평가 해보고 싶었습니다.

건배,

Rob


복잡한 질문에 대한 간단한 대답은 불가능합니다. 질문에 더 집중하는 것이 도움이 될 것입니다.
Rob Wells
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.