Tôi mới sử dụng CMake và tôi đang sử dụng Khung kiểm tra của Google. Tôi đã tìm kiếm các ví dụ phức tạp hơn về kết hợp CMake và khung kiểm tra của Google, nhưng tôi đã không có nhiều may mắn. Tôi đã hy vọng rằng ai đó có thể cung cấp ý kiến của họ về các thiết lập tôi đã đến và trả lời một câu hỏi cho tôi. Dưới đây là cấu trúc dự án cơ bản:Đầu ra Kiểm tra Đơn vị & Tư vấn Cấu trúc Dự án --- CMake + Khung kiểm tra của Google
ProjectFolder
-CMakeLists.txt
/xây dựng
/include
-all file .h của tôi
/src
-CMakeLists.txt
-tất cả các tệp .cpp của tôi
/test
-CMakeLists.txt
/gtest
-Google của CMakeLists.txt
/chế giễu
-CMakeLists.txt
-cpp và h tệp cho mocks
Tóm lại, tệp gốc cmake thêm src và kiểm tra dưới dạng thư mục con. Tệp src cmake chứa các tệp cpp vào thư viện. Tệp thử nghiệm cmake thêm mocks và gtest làm thư mục con. Các tập tin cmake giả tạo globs tất cả các tập tin cpp của nó vào một thư viện thứ hai. Cuối cùng, tệp cmake trong thư mục kiểm tra sẽ liên kết thư viện src, thư viện google và thư viện mocks với các tệp thực thi thử nghiệm đơn vị.
Những gì tôi cuối cùng đã có được một số thực thi: objA_unittest, objB_unittest, vv
Một vài điều:
Để xây dựng tất cả điều này và vẫn giữ thư mục dự án của tôi khá sạch Tôi cd vào xây dựng thư mục và chạy "cmake .." Điều này dường như làm việc thực sự tốt và tôi đã được lập kế hoạch cấu hình vim để luôn luôn chạy làm cho ra khỏi thư mục này. Có ai có bất kỳ lời khuyên hoặc hoặc xem bất kỳ vấn đề với cách tiếp cận này?
Tôi không thích ý tưởng phải lồng thư viện google vào thư mục dự án của mình (đặc biệt nếu cuối cùng tôi có nhiều dự án sử dụng nó), nhưng dường như bạn không nên biên dịch trước thư viện google Tôi không thể nhìn thấy không có cách nào xung quanh này. Tuy nhiên, nếu có ai biết cách nào tốt hơn, tôi rất thích nghe nó.
Chạy thử nghiệm. Tôi thích rằng tất cả những gì tôi phải làm là chạy "kiểm tra" để thực hiện tất cả các thử nghiệm đơn vị của tôi với ctest. Tuy nhiên, tôi đã phát hiện ra rằng tôi không thích đầu ra rất nhiều. Mỗi bài kiểm tra đơn vị thực thi có chứa một số bài kiểm tra đơn vị khác nhau. Việc chạy những phần này trực tiếp cung cấp phản hồi rất chi tiết của Google. Nếu một trong các bài kiểm tra trong một tập tin thực thi thất bại, tôi biết chính xác những gì kiểm tra thất bại và tại sao. Trước đây, tôi đã sử dụng một makefile và ở phần cuối của makefile, tôi chỉ thực hiện tất cả các bài kiểm tra. Trước tiên, tôi đã cố khắc phục điều này bằng cách tạo mục tiêu xây dựng tùy chỉnh trong cmake.Tuy nhiên, nó chỉ thực hiện lệnh đầu tiên. Tôi cần một cách để có được đầu ra tiết kiệm hơn từ CTEST HOẶC tôi cần một cách để tự động xuất ra một tập lệnh bash hoặc một cái gì đó tương tự từ CMake để thực thi từng thử nghiệm đơn vị thực thi. Nói cách khác, tôi đã cài đặt tệp cmake ngay bây giờ nên tôi chỉ phải thêm kiểm tra đơn vị vào một nơi để tạo tệp thi hành và tôi không muốn phải nhớ thêm nó vào vị trí thứ hai nếu tôi có thể tránh nó. Có ai có kinh nghiệm nào sẽ hữu ích trong thời điểm này không?
Cảm ơn rất nhiều trước.
Hãy cẩn thận: có một mục tiêu CMake được xác định trước có tên 'thử nghiệm'. Việc thêm mục tiêu tùy chỉnh có cùng tên đó thường không được khuyến nghị. Bạn cũng có thể gọi "ctest -V" hoặc "ctest -VV" trong cùng thư mục mà bạn đang gọi "thực hiện kiểm tra" ngay bây giờ và nó sẽ chạy toàn bộ bộ thử nghiệm * và * cho bạn thấy kết quả của tất cả các thử nghiệm. (-V == verbose, -VV == rất tiết) – DLRdave
Chỉ cần FYI, tôi thực sự đánh giá cao phản hồi nhanh (và câu trả lời dưới đây). Tôi vừa bận rộn với trường học và chưa có thời gian để kiểm tra một trong những điều này. Ngay khi tôi làm, tôi sẽ chọn câu trả lời phù hợp nhất. Chỉ muốn cho bạn biết tôi đã không quên. :) – Landon