Tôi muốn sử dụng make để có được một xây dựng mô-đun kết hợp với continuous integration, tự động kiểm tra đơn vị và đa nền tảng xây dựng. Các thiết lập tương tự là phổ biến trong Java và .NET, nhưng tôi đang gặp khó khăn khi kết hợp với nhau để tạo và C/C++. Làm thế nào nó có thể đạt được?Perfect makefile
yêu cầu của tôi:
- nhanh xây dựng; không đệ quy làm (Stack Overflow câu hỏi What is your experience with non-recursive make?)
- hệ thống mô-đun (có nghĩa là, phụ thuộc tối thiểu, makefile trong thư mục con với các thành phần)
- đa nền (thường là máy tính để thử nghiệm đơn vị, mục tiêu nhúng cho hệ thống tích hợp/phát hành)
- hoàn thành kiểm tra
- khả năng thực hiện các bài kiểm tra (tự động) đơn vị (kỹ thuật Agile)
- móc vào hệ thống tích hợp liên tục
- dễ sử dụng phụ thuộc
Tôi đã bắt đầu với non-rec make. Tôi vẫn thấy đây là một nơi tuyệt vời để bắt đầu.
Hạn chế cho đến nay:
- không lồng ghép các đơn vị kiểm tra
- không tương thích của cửa sổ trình biên dịch ARM dựa với đường dẫn Cygwin
- không tương thích của makefile với Windows \ đường dẫn
- về phía trước cách phụ thuộc
Cấu trúc của tôi trông giống như:
project_root /algorithm /src /algo1.c /algo2.c /unit_test /algo1_test.c /algo2_test.c /out algo1_test.exe algo1_test.xml algo2_test.exe algo2_test.xml headers.h /embunit /harnass makefile Rules.top
Tôi muốn giữ mọi thứ đơn giản; ở đây các bài kiểm tra đơn vị (algo1_test.exe) phụ thuộc vào cả thành phần 'thuật toán' (ok) và khung kiểm thử đơn vị (có thể hoặc không thể biết tại thời điểm xây dựng này). Tuy nhiên, việc di chuyển các quy tắc xây dựng lên đầu sẽ không hấp dẫn tôi vì điều này sẽ phân phối kiến thức địa phương về các thành phần trong toàn hệ thống.
Đối với đường dẫn Cygwin: Tôi đang làm việc để tạo bản dựng bằng cách sử dụng các đường dẫn tương đối. Điều này giải quyết các vấn đề /cygdrive/c
(như trình biên dịch thường có thể xử lý/đường dẫn) mà không cần đưa vào C: (mà làm cho không thích). Bất kỳ ý tưởng nào khác?
Lưu ý rằng bạn có thể sử dụng '/' làm dấu phân tách đường dẫn trong Windows thường tốt. Gần như tất cả các hàm API sử dụng các đường dẫn trong suốt đều dịch chúng sang '\'. – Joey
Thật vậy. Tuy nhiên, đó là ký tự ổ đĩa gây ra vấn đề. Làm cho không xử lý: tốt (vì nó định nghĩa một mục tiêu). Và/cygdrive/c/không được các ứng dụng windows nhận ra. Nếu tôi dịch/cygdrive/c thành c:/thì tệp phụ thuộc được tạo bởi trình biên dịch sẽ không được công nhận bởi makefile. – Adriaan