Chúng tôi viết một ứng dụng chủ yếu trong C
nhưng một số mô-đun phụ được viết bằng C++
(trên Linux). Vấn đề là làm thế nào để viết CMakeLists.txt
tệp để sử dụng g++
cho một số thư mục con và gcc
cho một thư mục khác.Trộn C và C++ với CMAKE
Trả lời
Trình biên dịch và trình liên kết thường được xác định bởi phần mở rộng tệp nếu không được đặt khác. Vì vậy, miễn là kết thúc tập tin là tốt, mã của bạn được biên dịch và liên kết với trình biên dịch chính xác.
Trên ghi chú bên, hãy nhớ thực hiện đúng khai báo C bên ngoài, nếu bạn trộn C và C++.
Sự khác biệt giữa g ++ và gcc về cơ bản là g ++ chuyển -lstdC++ thành trình liên kết. Chỉ cần thêm thư viện chuẩn C++ như là một phụ thuộc rõ ràng của các mô-đun C++.
Để rõ ràng, gcc có thể biên dịch mã C++. gcc và g ++ là như nhau trong lĩnh vực này. Sự khác biệt chỉ là khi sử dụng g ++, bạn không cần phải trình bày rõ ràng trình biên dịch để liên kết tới libstdC++.
Cảm ơn bạn, tôi đã viết lại câu hỏi. Phần này là OK, nhưng tôi muốn biết, làm thế nào để xác định gcc/g ++ cho các thư mục con cụ thể. – Cartesius00
Nhu cầu sử dụng g ++ trên một số thư mục phụ là gì nếu bạn chỉ có thể sử dụng gcc và phụ thuộc rõ ràng vào libstdC++ khi cần thiết? – bames53
Chúng ta phải trộn một số mã C và C++ hiện có. – Cartesius00
Bạn có thể đặt thuộc tính LANGUAGE của tệp nguồn thành "CXX". Xem documentation.
CMake tự động thực hiện việc này. Bạn có thể tự do trộn lẫn cả hai loại tệp trong tệp CMakeLists.txt của mình:
. . .
add_executable(
my_program
code.cpp
more_code.c
)
Tôi làm việc này mọi lúc và nó hoạt động.
Lưu ý rằng bạn cần bảo vệ tiêu đề C. Vì vậy, trong code.cpp bạn muốn nói 'extern" C "{#include" more_code.h "}' – Unapiedra
- 1. Trộn nguồn C và lắp ráp và xây dựng với cmake
- 2. Trộn Objective-C và C++
- 3. CMake clang và C++ 0x
- 4. Trộn các tệp C và Assembly
- 5. Trộn mã VB.net với C# code
- 6. Qt - trộn Qt và std :: C++ loại
- 7. Hồ sơ với CMake, C++ và Visual Studio 2012
- 8. Rắc rối với CMake và Visual C++ 2010
- 9. Trộn Mã C# và mã C++ được nhân lên trên Windows với Visual Studio
- 10. Trộn cờ RTTI trong C++
- 11. Xáo trộn thẻ trong C#
- 12. Những cạm bẫy và gotchas của trộn Objective-C và C là gì?
- 13. Trộn mã C và D trong cùng một chương trình?
- 14. Liên kết các tệp C và CXX trong CMake
- 15. Có cách nào để trộn MonoTouch và Objective-C không?
- 16. Biên dịch OpenCV với CMake và minGW
- 17. cmake, Clang và C++ v11 trên OS X 10.8
- 18. Tạo dự án C# bằng CMake
- 19. bị xáo trộn Mã trong C
- 20. CMake và Boost
- 21. thêm hỗ trợ C++ 0x vào cmake
- 22. cmake vs waf cho dự án C++
- 23. Trộn C tăng/giảm trước/sau với toán tử Objective-C dot?
- 24. sử dụng nullptr thay vì NULL khi trộn C và C++
- 25. Đặt đường dẫn trong CMake (C++, ImageMagick)
- 26. Buộc CMake sử dụng trình biên dịch C++ cho tệp C với Visual Studio
- 27. Bất kỳ vấn đề nào với thư viện trộn có và không có std = C++ 0x
- 28. Dòng lệnh CMake cho C++ #define
- 29. Django - Trộn ListView và CreateView
- 30. CMake và MsVS-NuGet
"nếu không được đặt khác", nghĩa là ở đầu 'CMakeLists.txt', sử dụng' project (myproject) 'thay vì nói 'project (myproject C)'. – congusbongus