Các lựa chọn thay thế đầy hứa hẹn để thực hiện? [đóng cửa]


83

Tôi đã sử dụng make và makefiles trong nhiều năm, và mặc dù khái niệm là đúng đắn, nhưng việc triển khai có một cái gì đó được mong muốn.

Có ai tìm thấy bất kỳ giải pháp thay thế tốt nào để làm cho vấn đề không phức tạp hơn không?


Câu trả lời sẽ không phụ thuộc nhiều vào vấn đề là gì? Đối với những thứ tôi đã cố gắng làm với nó, makequá đơn giản.
reinierpost

Ruby Rake, CoffeeScript Bánh, Python SCons, Java Ant / Maven, C # MSBuild, cross-platform CMake
FilBot3


makefile ngắn gọn nhưng là một ngôn ngữ của riêng nó. Tôi thấy khó gỡ lỗi. Đối với người dùng python có nhiều gói bao gồm scons, luigi(thích nghi với shouldsee/luck), snakemake, waf. Có nhiều lựa chọn thay thế Java nhưng không gian này quá nhỏ để viết tất cả chúng ra.
nên xem

Tôi vẫn chưa thử nó, nhưng github.com/casey/just nghe có vẻ hơi hứa hẹn, "tạo ra các thông báo lỗi chi tiết và tránh các đặc điểm riêng của make, vì vậy gỡ lỗi justfile dễ dàng hơn và ít ngạc nhiên hơn so với gỡ lỗi một makefile"
Tiến sĩ Jan-Philip Gehrcke

Câu trả lời:


30

kiểm tra SCons . Ví dụ: Doom 3 và Blender sử dụng nó.


+1 cho scons - đủ tương tự về mặt khái niệm để giúp bạn dễ dàng tìm hiểu nhưng sửa một số lỗi nặng hơn về kết cấu (chẳng hạn như xử lý khoảng trắng trong tên).
Tom

5
SCons chỉ là Python 2 và sau nhiều ngày lãng phí sử dụng SCons để biên dịch phiên bản Python 3 của một dự án được viết bằng Python và C ++, tôi khuyên mọi người nên tránh xa. Chỉ cần sử dụng CMake, nó đã trở thành tiêu chuẩn cho C ++ tại thời điểm này. Hoặc nếu bạn muốn sử dụng hệ thống xây dựng dựa trên Python, hãy sử dụng Meson . Nó chạy nhanh và đang được phát triển tích cực, điều này không thể nói đối với SCons.
ostrokach

SCons đã hỗ trợ Python 3 kể từ tháng chín 2017 (5 tháng sau khi bình luận trên đã được viết) và là Python 3 chỉ kể từ phiên bản 4.0 (tháng 7 năm 2020).
Michael Platings

27

Tôi có rất nhiều người bạn thề rằng CMake sẽ phát triển đa nền tảng:

http://www.cmake.org/

Đó là hệ thống xây dựng được sử dụng cho VTK (trong số những thứ khác), là một thư viện C ++ với các liên kết Python, Tcl và Java đa nền tảng. Tôi nghĩ rằng đó có lẽ là thứ ít phức tạp nhất mà bạn sẽ tìm thấy với nhiều khả năng như vậy.

Bạn luôn có thể thử các công cụ tự động tiêu chuẩn . Các tệp Automake khá dễ ghép lại với nhau nếu bạn chỉ chạy trên Unix và nếu bạn sử dụng C / C ++. Việc tích hợp phức tạp hơn và công cụ tự động không phải là hệ thống đơn giản nhất từ ​​trước đến nay.


9
Lưu ý rằng CMake vẫn chỉ tạo các tệp trang điểm. Vì vậy, nếu vấn đề với việc triển khai GNU Make là nó không thể làm điều gì đó bạn muốn, thì CMake có thể sẽ không giúp bạn. Hoặc autotools, cho vấn đề đó.
Tom

15
CMake không chỉ tạo các tệp trang điểm. CMake có thể tạo ra rất nhiều loại tệp xây dựng khác nhau nhắm mục tiêu đến hàng tấn trình biên dịch và nền tảng khác nhau. Cá nhân, tôi ghét CMake vì cú pháp cấu hình hoàn toàn kinh tởm.
Taywee

19

doit là một công cụ python. Nó dựa trên các khái niệm về công cụ xây dựng nhưng chung chung hơn.

  • bạn có thể xác định cách một nhiệm vụ / quy tắc được cập nhật (không chỉ kiểm tra dấu thời gian, tệp đích không bắt buộc)
  • các phụ thuộc có thể được tính toán động bởi các tác vụ khác
  • các hành động của task có thể là các hàm python hoặc các lệnh shell

1
cảm ơn bạn câu trả lời này, doit trông giống như một công cụ tuyệt vời
Bedros

16

Một số dự án GNOME đã được chuyển sang waf .

Nó dựa trên Python, giống như Scons, nhưng cũng độc lập - vì vậy thay vì yêu cầu các nhà phát triển khác cài đặt công cụ xây dựng yêu thích của bạn, bạn chỉ cần sao chép tập lệnh xây dựng độc lập vào dự án của mình.


14

Tôi khuyên bạn nên sử dụng Rake . Đó là công cụ đơn giản nhất mà tôi đã tìm thấy.

Tuy nhiên, các công cụ tốt khác mà tôi đã sử dụng, nếu Ruby không phải là thứ của bạn, là:

  • AAP (Python)
  • SCons (Python)
  • Ant (Java, cấu hình bằng XML, khá phức tạp)

7

Hãy lưu ý về ninjacông cụ xây dựng (v1.8.2 tháng 9 năm 2017) chịu ảnh hưởng của tupredo.

Trình tạo tệp xây dựng cmake(ví dụ: cho Unix Makefiles, Visual Studio, XCode, Eclipse CDT, ...) cũng có thể tạo ninjatệp xây dựng kể từ phiên bản 2.8.8 (tháng 4 năm 2012) và afaik, ninjagiờ đây thậm chí còn là công cụ xây dựng mặc định được sử dụng bởi cmake.

Nó được cho là hoạt động tốt hơn makecông cụ (theo dõi phụ thuộc tốt hơn và cũng được song song hóa).

cmakelà một công cụ đã được thiết lập tốt. Bạn luôn có thể chọn công cụ xây dựng sau đó mà không cần sửa đổi các tệp cấu hình của mình. Vì vậy, nếu một bản dựng tốt hơn được phát triển trong tương lai sẽ được hỗ trợ bởi cmakebạn có thể chuyển sang bản đó một cách thuận tiện.

Lưu ý rằng đối với c / c ++, việc cải thiện thời gian biên dịch đôi khi bị giới hạn do tiêu đề được đưa vào qua bộ tiền xử lý (đặc biệt khi sử dụng lib chỉ dành cho tiêu đề, ví dụ: boost & eigen ), hy vọng sẽ được thay thế bằng đề xuất mô-đun (trong một bài đánh giá kỹ thuật của c ++ 11 hoặc cuối cùng trong c ++ 1y). Kiểm tra bản trình bày này để biết chi tiết về vấn đề này.


3
Đáng chú ý là tupphụ thuộc vào fusevà có chạy phần mở rộng hạt nhân cầu chì, mà theo như tôi liên quan cho thấy những người bảo trì là những người sai lầm. redođã không được cập nhật trong hai năm. Tôi muốn giới thiệu ninja.
mxcl

5

Tôi đã viết một công cụ tên là sake để cố gắng viết những thứ giống như makefile trở nên rất dễ đọc và dễ viết.


Hấp dẫn; nhưng bạn có thể cung cấp cho chúng tôi một chút thông tin về lý do tại sao bạn nghĩ rượu sake dễ “đọc và viết” hơn không? Chúng ta không cần phải cài đặt dự án để xem nó trả lời câu hỏi.
Dour High Arch

Chắc chắn rồi! Tôi nghe có vẻ như một phần lý do tại sao tác giả của câu hỏi ban đầu lại lo ngại về việc triển khai Make "làm phức tạp vấn đề" là do cú pháp tối nghĩa của makefiles. Sake sử dụng các tệp được viết bằng YAML và từ những gì tôi thu thập được từ đầu vào của người khác, việc đọc và ghi đơn giản hơn nhiều.
tonyfischetti

Thực tế là nó sử dụng cú pháp YAML nên là một phần của câu trả lời, có lẽ với một số chi tiết về cách YAML tương phản với makecú pháp.
Aaron Novstrup

Tôi vừa mới sử dụng Sake cho một kịch bản xây dựng và nó thật tuyệt vời. Cảm ơn bạn đã viết nó!
nooblar

Rượu Sake đơn giản đến kinh ngạc.
Dan

4

Nó phụ thuộc vào những gì bạn đang cố gắng làm. Nếu tất cả những gì bạn muốn là phụ thuộc đích theo kiểu make-style và lệnh gọi, thì Make thực sự là một trong những công cụ tốt hơn cho tác vụ. :-) Rake rất hay, nhưng có thể hơi vụng về đối với một số trường hợp đơn giản. Ant tất nhiên là thành phố rộng lớn, nhưng nó có hỗ trợ tốt hơn cho việc xây dựng các ngôn ngữ giống Java (bao gồm Scala và Groovy). Ngoài ra, Ant có sẵn ở khắp mọi nơi . Đó là lý do chính tôi sử dụng nó. Bởi vì nó hoạt động nhất quán trên Windows, nó thực sự còn đa nền tảng hơn Make.

Nếu bạn muốn quản lý phụ thuộc cho các thư viện giống như Java, Maven là lựa chọn kinh điển, nhưng cá nhân tôi thích Buildr hơn rất nhiều. Nó nhanh hơn và dễ tùy chỉnh hơn nhiều (dựa trên Rake). Thật không may, nó vẫn chưa phổ biến như Maven.



2

Tôi vẫn thích thực hiện sau khi đã xem xét một loạt các lựa chọn thay thế. Khi bạn tự động tạo các phụ thuộc thông qua trình biên dịch hoặc một cái gì đó như fastdep thì không còn nhiều việc phải làm. Đặc biệt, tôi không muốn tập lệnh xây dựng của mình bị ràng buộc với ngôn ngữ triển khai và tôi không thích viết nội dung bằng XML khi có sẵn các lựa chọn thay thế dễ đọc hơn. Tuy nhiên, một công cụ thể hiện một ngôn ngữ có mục đích chung là có lợi, nhưng một ngôn ngữ thông dịch khác thì không (afaik). Sai với Make là gì? có thể thu hút quan điểm của bạn về việc rời bỏ thực tế.

/ Allan


Tôi cũng thích Make; nó tiêu chuẩn sag, có sẵn ở khắp mọi nơi và có khả năng hợp lý là bất kỳ ai mới tham gia dự án sẽ sử dụng nó trước đây (hoặc ít nhất là một cơ hội tốt hơn bất kỳ thứ gì khác). Nhưng. Tôi có một cơ sở mã lớn (vài nghìn tệp nguồn C ++) được viết cho Visual C ++ và tôi đang cố gắng xây dựng theo GCC trên Linux. Dường như chọn một công cụ xây dựng rõ ràng và chúng tôi đã viết một công cụ chuyển đổi nhanh chóng và tiện lợi để phân tích cú pháp các tệp vcxproj và tạo ra các tệp Makefiles. Tất cả đều tuyệt vời, cho đến khi chúng tôi thử nó trên một dự án có khoảng trống trong tên. chúng ta phải làm gì?
Tom

Đối với hồ sơ, tôi đã kết thúc với SCons. Vì trình chuyển đổi của chúng tôi được viết bằng Python, nên việc chuyển đổi nó thành SConscript khá dễ dàng.
Tom

@Tom chúng tôi có thể lấy bản sao của trình phân tích cú pháp tệp vcxproj ở đâu? Tôi cũng đang làm việc trên một dự án nhỏ trên Windows và muốn chuyển sang ubuntu.
Dan

@Maverick - tôi xin lỗi, nó là độc quyền và tôi không làm việc ở đó nữa. Tôi e rằng việc tạo lại nó không phải là chuyện nhỏ đối với các hệ thống xây dựng phức tạp; trong khi tệp không gian làm việc VS "chỉ là XML" và việc tìm ra tệp nguồn nào cần tạo và những tùy chọn nào để áp dụng không quá khủng khiếp, bạn cần tính đến cấu hình xây dựng (gỡ lỗi, phát hành) và giải pháp cũng như các dự án riêng lẻ có thể cũng nhập các tệp msbuild tùy ý. Một tùy chọn khác mà chúng tôi đã xem xét là sử dụng msbuild để nhắm mục tiêu GCC - và bây giờ bạn có thể thấy điều này dễ dàng hơn vì msbuild đã trưởng thành hơn rất nhiều kể từ đó.
Tom

1

FlowTracer từ RTDA là một lựa chọn tốt khác mà tôi đã thấy được sử dụng cho mục đích thương mại trong môi trường quy mô lớn (hàng chục nghìn công việc): http://www.rtda.com/flowtracer-design-flow-infra Structure-software

Nó có GUI hiển thị biểu đồ phụ thuộc với các hộp được mã hóa màu cho các công việc và hình bầu dục cho các tệp. Khi số lượng công việc và tệp tăng cao, một công cụ dựa trên GUI như FlowTracer là khá cần thiết.

Chi phí thiết lập ban đầu cao hơn Make. Có một đường cong học tập để thiết lập quy trình đầu tiên của bạn bằng cách sử dụng nó. Sau đó, nó sẽ nhanh hơn.


0

Tôi không chắc liệu bạn có đang đặt câu hỏi chính xác ở đây hay không.

Bạn có muốn làm đơn giản không? Trong trường hợp đó, bạn cần nhờ một người rất quen thuộc với việc tạo một chuỗi (M | m) akefiles để đơn giản hóa vấn đề của bạn.

Hay bạn đang muốn xem xét công nghệ cơ bản? Chúng ta có muốn thực thi một kiến ​​trúc kiểu thiết kế theo hợp đồng được xây dựng trong và thực thi trong thiết kế mã không? Hoặc có thể, bản thân ngôn ngữ, ví dụ như Ada và khái niệm về thông số kỹ thuật (giao diện) và nội dung (triển khai)?

Hướng đi của bạn chắc chắn sẽ ảnh hưởng đến kết quả tiềm năng của một câu hỏi như vậy?

Về cơ bản, các cách mới để xây dựng hệ thống chỉ từ những thành phần đã thực sự thay đổi so với việc áp dụng công nghệ mới có các cơ chế được thiết kế sẵn như vậy.

Xin lỗi, đây không phải là câu trả lời trực tiếp. Chỉ muốn thử và giúp bạn đánh giá xem bạn muốn đi theo con đường nào.

chúc mừng,

Rob


Một câu trả lời đơn giản cho một câu hỏi phức tạp là không thể. Cung cấp nhiều trọng tâm hơn trong câu hỏi sẽ hữu ích.
Rob Wells
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.