2008-12-27 14 views
79

Tôi đang làm việc trên một dự án C++ nguồn mở, cho mã biên dịch trên Linux và Windows. Tôi sử dụng CMake để xây dựng mã trên Linux. Để dễ thiết lập phát triển và lý do chính trị, tôi phải dính vào các tệp/trình chỉnh sửa dự án của Visual Studio trên Windows (ví dụ: tôi không thể chuyển sang Code::Blocks). Tôi thấy hướng dẫn để tạo tệp Visual Studio bằng CMake, dưới dạng here.Sử dụng CMake để tạo các tệp dự án Visual Studio C++

Bạn đã sử dụng CMake để tạo tệp Visual Studio trước đây chưa? Trải nghiệm của bạn như thế nào? Giả sử tôi muốn thêm một tệp mới vào dự án của tôi. Công việc này là gì?

Trả lời

52

CMake thực sự khá tốt cho việc này. Phần quan trọng là tất cả mọi người ở phía Windows phải nhớ chạy CMake trước khi tải trong giải pháp, và mọi người ở phía Mac của chúng tôi sẽ phải nhớ chạy nó trước khi thực hiện.

Phần khó nhất là nhà phát triển Windows đảm bảo thay đổi cấu trúc của bạn trong tệp cmakelist.txt chứ không phải trong tệp giải pháp hoặc dự án vì những thay đổi đó có thể bị mất và thậm chí nếu không bị mất sẽ không được chuyển sang phía Mac cũng cần chúng, và những người Mac sẽ cần phải nhớ không sửa đổi các tập tin cho cùng một lý do.

Nó chỉ đòi hỏi một chút suy nghĩ và kiên nhẫn, nhưng sẽ có những sai lầm lúc đầu. Nhưng nếu bạn đang sử dụng continuous integration trên cả hai mặt thì những thứ này sẽ bị lung lay sớm và cuối cùng mọi người sẽ có thói quen.

+9

Nếu điều này đúng một lần thì không còn nữa. Bất kỳ thay đổi nào đối với CMakeLists.txt sẽ gây ra sự tái tạo của hệ thống xây dựng (tệp dự án cho studio trực quan, makefiles, v.v.). Các công việc trong Visual Studio là loại gây phiền nhiễu kể từ Visual Studio không tái tạo các tập tin dự án khi nó phát hiện rằng mọi thứ đã thay đổi nhưng thay vì chờ đợi cho bạn để làm một xây dựng gây ra một hộp thoại xuất hiện kể từ khi xây dựng cần phải được hủy bỏ để tái tải tập tin dự án. – Vitali

+0

Thông báo trước cho điều này là bạn không phải chạy trình biên dịch Visual Studio thông qua IDE. Bạn có thể chạy nó trên dòng lệnh: 'C: \ ...> MSBuild ALL_BUILD.vcxproj' – PfunnyGuy

10

Như Alex đã nói, nó hoạt động rất tốt. Phần khó khăn duy nhất là nhớ thực hiện bất kỳ thay đổi nào trong các tệp cmake, thay vì từ bên trong Visual Studio. Vì vậy, trên tất cả các nền tảng, quy trình làm việc tương tự như nếu bạn đã sử dụng các tệp makefiles cũ.

Nhưng nó khá dễ dàng để làm việc với, và tôi đã không có vấn đề với cmake tạo ra các tập tin không hợp lệ hoặc bất cứ điều gì như thế, vì vậy tôi sẽ không lo lắng quá nhiều.

26

Chúng tôi đã chuyển chuỗi xây dựng của bộ phận thành CMake và chúng tôi đã có một số roadbumps nội bộ từ các phòng ban khác sử dụng tệp dự án của chúng tôi và nơi đã quen với việc nhập chúng vào các giải pháp của họ. Chúng tôi cũng đã có một số khiếu nại về CMake không được tích hợp đầy đủ vào trình quản lý dự án/giải pháp Visual Studio, vì vậy các tệp phải được thêm thủ công vào CMakeLists.txt; đây là một sự phá vỡ lớn trong dòng công việc mà mọi người quen thuộc.

Nhưng nói chung, đó là một quá trình chuyển đổi khá trơn tru. Chúng tôi rất vui vì chúng tôi không phải đối phó với các tệp dự án nữa.

Các công việc cụ thể cho thêm một file mới với một dự án thực sự là đơn giản:

  1. Tạo tập tin, chắc chắn rằng nó là ở địa điểm chính xác.
  2. Thêm tệp vào CMakeLists.txt.
  3. Xây dựng.

CMake 2.6 tự động tự chạy lại nếu bất kỳ tệp CMakeLists.txt nào đã thay đổi (và (bán) tự động tải lại giải pháp/dự án).

Hãy nhớ rằng nếu bạn đang làm các bản dựng ngoài nguồn, bạn cần cẩn thận không tạo tệp nguồn trong thư mục xây dựng (vì Visual Studio chỉ biết về thư mục xây dựng).

6

CMake có thể tạo ra thật sự tốt đẹp Visual Studio .projs/.slns, nhưng luôn luôn có vấn đề với sự cần thiết phải sửa đổi các .cmake file chứ không phải .proj/.sln. Như hiện nay, chúng ta đang đối phó với nó như sau:

  1. Tất cả các file nguồn đi đến /src và các tập tin có thể nhìn thấy trong Visual Studio chỉ là "liên kết" với họ theo quy định tại .filter.
  2. Lập trình bổ sung/xóa các tệp ghi nhớ để hoạt động trên thư mục /src được xác định, không phải thư mục mặc định của dự án.
  3. Khi hoàn thành, anh ấy chạy tập lệnh "làm mới" các tệp .cmake tương ứng.
  4. Anh ấy kiểm tra xem mã có thể được tạo trong môi trường được tạo lại hay không.
  5. Anh ấy cam kết mã.

Lúc đầu chúng tôi hơi sợ nó sẽ ra sao, nhưng quy trình làm việc hoạt động rất tốt và có thể nhìn thấy rõ ràng trước mỗi lần commit, mọi người có thể dễ dàng xem các thay đổi của anh ta có được ánh xạ chính xác trong các tệp .cmake hay không.

Một điều quan trọng cần biết là thiếu hỗ trợ (afaik) cho "Cấu hình giải pháp" trong CMake. Vì nó là viết tắt, bạn phải tạo ra hai thư mục với các dự án/giải pháp - một cho mỗi loại xây dựng (gỡ lỗi, phát hành, v.v.). Không có hỗ trợ trực tiếp cho các tính năng phức tạp hơn - nói cách khác: chuyển đổi giữa các cấu hình sẽ không cung cấp cho bạn những gì bạn có thể mong đợi.

+3

Theo CMake 2.8.10, các giải pháp được tạo ra có 4 cấu hình xây dựng thông thường, và có hỗ trợ cho việc xác định các tùy chỉnh bổ sung. – John

+0

@John Cảm ơn, rất vui được biết! –

36

Không chắc chắn nếu nó liên quan trực tiếp đến câu hỏi, nhưng tôi đang tìm kiếm một câu trả lời về cách thức để tạo ra * sln từ các dự án cmake Tôi đã phát hiện ra rằng người ta có thể sử dụng một cái gì đó như thế này:

cmake -G "Visual Studio 10" 

Ví dụ này tạo ra các tệp VS 2010 cần thiết từ một tệp CMakeLists.txt đầu vào

+0

Tại https://stackoverflow.com/questions/11269833/cmake-selecting-a-generator-within-cmakelists-txt @Ivan chỉ ra rằng điều này có thể được đưa vào một tập tin PreLoad.cmake trong thư mục tương tự như từ trên của bạn cấp CMakeLists.txt và sau đó bạn chỉ có thể làm 'cmake'. – PfunnyGuy

5

CMake tạo các dự án và giải pháp Visual Studio liền mạch. Bạn thậm chí có thể tạo ra các dự án/giải pháp cho các phiên bản Visual Studio khác nhau mà không thực hiện bất kỳ thay đổi nào đối với các tệp CMake.

Thêm và xóa tệp nguồn chỉ là vấn đề sửa đổi CMakeLists.txt trong đó có danh sách tệp nguồn và tạo lại dự án/giải pháp. Thậm chí còn có một hàm globbing để tìm tất cả các nguồn trong một thư mục (mặc dù nó nên được sử dụng cẩn thận).

Liên kết sau giải thích hành vi cụ thể của CMake và Visual Studio rất tốt.

CMake and Visual Studio

0

Tôi đã bắt đầu dự án của riêng mình, được gọi là syncProj. Tài liệu/liên kết tải về từ đây:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Nếu bạn đang lập kế hoạch để sử dụng Visual studio để phát triển, và hiện chỉ C++ được hỗ trợ.

Lợi thế chính so với các hệ thống tạo khác là bạn có thể thực sự gỡ lỗi tập lệnh của mình vì dựa trên C#.

Nếu bạn không quen thuộc với syncProj, bạn chỉ có thể chuyển đổi giải pháp/dự án thành tập lệnh .cs và tiếp tục phát triển thêm từ thời điểm đó.

Trong cmake, bạn sẽ cần phải viết mọi thứ từ đầu.