Sử dụng CMake để tạo tệp dự án Visual Studio C ++


91

Tôi đang làm việc trên một dự án C ++ mã 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à vì lý do chính trị, tôi phải sử dụng tệp / trình chỉnh sửa dự án 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, như ở đây .

Bạn đã sử dụng CMake để tạo tệp Visual Studio trước đây chưa? Kinh 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 mình. Quy trình làm việc này là gì?


1
Đối với những người trong GNU + Linux đang cố gắng tạo tệp dự án cho Visual Studio, dành riêng cho Windows, hãy ghi nhớ câu trả lời này . TL; DR: Trình tạo dành riêng cho nền tảng và bạn phải sử dụng Windows để làm điều đó.
code_dredd

Câu trả lời:


57

CMake thực sự khá tốt cho việc này. Phần quan trọng là mọi người bên Windows phải nhớ chạy CMake trước khi tải giải pháp và mọi người bên 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à với tư cách là nhà phát triển Windows, đảm bảo các thay đổi cấu trúc của bạn nằm 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ể sẽ 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 nhớ không sửa đổi tệp tạo vì những lý do tương tự.

Nó chỉ cần 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 tích hợp liên tục ở cả hai bên thì chúng sẽ sớm bị loại bỏ và mọi người cuối cùng sẽ có thói quen.


11
Nếu điều này đã đúng một lần, nó không còn nữa. Bất kỳ thay đổi nào đối với CMakeLists.txt sẽ tái tạo hệ thống xây dựng (tệp dự án cho studio trực quan, trang điểm, v.v.). Quy trình làm việc trong Visual Studio khá khó chịu vì Visual Studio không tạo lại các tệp dự án khi phát hiện thấy mọi thứ đã thay đổi mà thay vào đó, đợi bạn thực hiện xây dựng khiến một hộp thoại xuất hiện vì quá trình xây dựng cần được hủy bỏ. -tải tệp dự án.
Vitali

1
Lưu ý 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

2
@PfunnyGuy Xem thêm cmake --build ..
detly

@detly Cảm ơn! Tôi thực sự đã tìm thấy và sử dụng cmake --build . --config Debug -- /nologo /verbosity:minimal /m. Tôi sẽ chèn sau . target run_testsđể chạy thử nghiệm đơn vị googletest của mình và "Gỡ lỗi" có thể được thay thế bằng "Phát hành". (Thêm tùy chọn cấu hình cho gỡ lỗi là không bắt buộc, vì nó là mặc định, nhưng tôi bao gồm nó để hiển thị như thế nào nó có thể được hoán đổi với "Release")
PfunnyGuy

47

Không chắc nó có liên quan trực tiếp đến câu hỏi hay không, nhưng tôi đang tìm câu trả lời cho cách tạo * .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ụ tạo các tệp VS 2010 cần thiết từ tệp CMakeLists.txt đầu vào


1
Tại stackoverflow.com/questions/11269833/… @Ivan chỉ ra rằng điều này có thể được đưa vào tệp PreLoad.cmake trong cùng thư mục với CMakeLists.txt cấp cao nhất của bạn và sau đó bạn có thể làm cmake.
PfunnyGuy

25

Chúng tôi đã chuyển chuỗi xây dựng của bộ phận của mình sang CMake và chúng tôi đã gặp phải một số trở ngại nội bộ kể từ khi các bộ phận khác sử dụng tệp dự án của chúng tôi và quen với việc chỉ nhập chúng vào giải pháp của họ. Chúng tôi cũng có một số phàn nàn về việc 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 theo cách thủ công vào CMakeLists.txt; đây là một bước đột phá lớn trong quy trình làm việc mà mọi người đã quen.

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

Quy trình làm việc cụ thể để thêm tệp mới vào dự án thực sự đơn giản:

  1. Tạo tệp, đảm bảo rằng nó ở đúng nơi.
  2. Thêm tệp vào CMakeLists.txt.
  3. Xây dựng.

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

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


9

Như Alex nói, nó hoạt động rất tốt. Phần khó duy nhất là nhớ thực hiện bất kỳ thay đổi nào trong 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 trang điểm cũ thuần túy.

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


7

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

Việc thêm và xóa các tệp nguồn chỉ là vấn đề sửa đổi CMakeLists.txtdanh sách các tệp nguồn và tạo lại các dự án / giải pháp. Thậm chí còn có một chức năng hiển thị để 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 một cách thận trọng).

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

CMake và Visual Studio


Liên kết đó và dự án mẫu của nó rất, rất hữu ích, cảm ơn vì điều đó! Tôi khuyên bạn nên kết hợp một số mã nguồn từ github repo vào câu trả lời của bạn, chẳng hạn như đề cập rằng một dự án CMake tương đương với một giải pháp và một cái gì đó như add_executable được sử dụng để thêm tương đương với một dự án studio trực quan.
jrh

5

CMake có thể tạo Visual Studio thực sự đẹp .projs/ .slns, nhưng luôn có vấn đề với việc cần phải sửa đổi .cmaketệp thay vì .proj/ .sln. Như hiện tại, chúng tôi đang giải quyết nó như sau:

  1. Tất cả các tệp nguồn được chuyển đến /srcvà các tệp hiển thị trong Visual Studio chỉ là "liên kết" đến chúng được xác định trong .filter.
  2. Lập trình viên thêm / xóa các tệp ghi nhớ hoạt động trên /srcthư mục được xác định , không phải của dự án mặc định.
  3. Khi hoàn thành, anh ấy chạy một tập lệnh "làm mới" các .cmaketệp tương ứng .
  4. Anh ta kiểm tra xem mã có thể được xây dựng trong môi trường được tạo lại hay không.
  5. Anh ta cam kết mã.

Lúc đầu, chúng tôi hơi lo sợ về việc nó sẽ diễn ra như thế nào, nhưng quy trình làm việc hoạt động thực sự tốt và với sự khác biệt đẹp mắt có thể nhìn thấy trước mỗi lần cam kết, mọi người có thể dễ dàng xem liệu các thay đổi của mình có được ánh xạ chính xác trong .cmaketệp hay không.

Một điều quan trọng hơn cần biết là thiếu hỗ trợ ( afaik ) cho "Cấu hình giải pháp" trong CMake. Như hiện tại, bạn phải tạo hai thư mục với các dự án / giải pháp - một thư mục 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 mang lại cho bạn những gì bạn có thể mong đợi.


4
Kể từ CMake 2.8.10, các giải pháp đã tạo có 4 cấu hình xây dựng tùy chỉnh và có hỗ trợ xác định các cấu hình tùy chỉnh bổ sung.
John


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 xuống từ đây:

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

Nếu bạn định sử dụng Visual studio để phát triển và hiện tại chỉ hỗ trợ C ++.

Ưu điểm chính so với các hệ thống tạo khác là bạn thực sự có thể gỡ lỗi tập lệnh của mình, vì nó 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 của mình sang 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.

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.