Mặc dù dễ dàng tìm thấy thông tin mức bề mặt về cách sử dụng CMake, thông tin về cách sử dụng CMake đúng cách có vẻ cực kỳ khó tìm. Làm thế nào nên trong một dự án CMake có kích thước rất lớn (một tệp thực thi, một hoặc nhiều thư viện tĩnh được thực thi bởi tệp thực thi đó, một hoặc nhiều phụ thuộc bên ngoài được sử dụng bởi các thư viện tĩnh) các thư mục và tệp CMakeList.txt được sắp xếp? Những gì CMakeList.txt tập tin nên có những gì lệnh?Cách thiết lập dự án CMake chính xác?
Trả lời
Một cách tốt để tìm hiểu làm thế nào để sử dụng một cách hiệu quả CMake là bằng cách nhìn vào các dự án khác. LLVM và các tiểu dự án của nó là một ví dụ điển hình.
Nói chung, các phương pháp mã hóa tốt chuyển đổi sang thực tiễn CMake tốt; bạn muốn mô đun, một phong cách rõ ràng và linh hoạt.
Ví dụ về điều này có thể là có quy tắc để xây dựng tệp thi hành của bạn bên trong thư mục src
, sau đó sử dụng mục tiêu đó trong thư mục dự án gốc. Một cái gì đó như thế này:
-my_proj
|
----CMakeLists.txt //contains directives for top-level dependencies and linking, includes subfolders
----src
|
----CMakeLists.txt //contains definition of your main executable target
----internal_lib
|
----CMakeLists.txt //contains definition of your internal static libraries
my_proj/CMakeLists.txt
add_subdirectory(src)
find_package (Threads REQUIRED) #find pthreads package
target_link_libraries (my_exe my_lib ${CMAKE_THREAD_LIBS_INIT}) #link against pthreads and my_lib
my_proj/src/CMakeLists.txt
add_subdirectory(internal_lib)
add_executable(my_exe my_source1.cpp mysource2.cpp)
my_proj/src/internal_lib/CMakeLists.txt
add_library(my_lib my_lib_source1.cpp my_lib_source2.cpp)
Bạn có thể bao gồm một ví dụ rất đơn giản về những tập tin CMakeLists.txt này sẽ như thế nào? –
@ruslo, một điểm công bằng, nhưng chúng được nhận xét khá tốt và cho thấy việc sử dụng một loạt các tính năng, nhiều hơn tôi có thể nói cho nhiều ví dụ khác. Ngoài ra, các CMakeLists trở nên đơn giản hơn khi bạn hạ xuống cấu trúc thư mục; Tôi hy vọng rằng bất cứ ai cũng có thể hiểu các tệp để xây dựng các thư viện tĩnh nội bộ, chẳng hạn. – TartanLlama
Tôi hy vọng this tutorial chính xác là những gì bạn cần để bắt đầu với cấu hình CMake cho một dự án đơn giản bao gồm một tệp thực thi và một số thư viện - hãy xem! Tôi tìm ra CMake by Example anyway các khả năng tốt nhất để học CMake một cách dễ dàng:
Sử dụng CMake với thực thi
add_executable(myapp main.c)
Sử dụng CMake với các thư viện tĩnh
add_library(test STATIC test.c)
Sử dụng CMake với thư viện động
add_library(test SHARED test.c)
thư viện liên kết để thực thi với CMake
add_subdirectory(libtest_project) add_executable(myapp main.c) target_link_libraries(myapp test)
Nếu bạn quan tâm, bạn có thể cải thiện hướng dẫn này một chút, sử dụng: [cmake -H. -B_builds] (http://stackoverflow.com/a/20611964/2288008) để xây dựng dự án (thay vì 'mkdir _builds && cd _builds && cmake ..'). 'make' và' make install' sẽ chỉ làm việc cho makefile, bạn có thể sử dụng 'cmake --build _builds' và' cmake --build _builds --target install' cho bất kỳ loại trình tạo nào. Ngoài ra khi bạn sử dụng 'ExternalProject_Add' như thế bạn không thể sử dụng các mô-đun' find_package'. –
- 1. debian - Dự án cmake
- 2. CMake - thiết lập python virtualenv
- 3. Cách chính xác để thiết lập Github repo trong Pydev?
- 4. Thiết lập React trong dự án CakePHP
- 5. Thiết lập dự án Grails trong Intellij
- 6. Dự án thiết lập VS2017 - Ở đâu?
- 7. Thiết lập dự án với IvyDE
- 8. Chỉ định cách cmake tạo dự án studio trực quan
- 9. Dự án thiết lập mạng: Cách chuyển nhiều trường CustomActionData
- 10. Cách thiết lập dự án openMP cơ bản trong CLion
- 11. Làm cách nào để thiết lập dự án thử nghiệm cho dự án plugin Eclipse
- 12. Cách sử dụng QML_IMPORT_PATH với Dự án Qt Cmake?
- 13. Thiết lập sonar-runner cho nhiều dự án java
- 14. HRESULT = '80004005' trong Visual Studio 2008 Thiết lập dự án
- 15. thiết lập dự án Grails trong IntelliJ IDEA
- 16. Cách thiết lập chính xác Pry in Rails 4.2
- 17. Nhập dự án CMake vào Eclipse CDT
- 18. Thiết lập cấu trúc thư mục dự án EmberJS?
- 19. Thiết lập Dự án Web động Eclipse tham chiếu dự án khác
- 20. Tham chiếu WixVariable được xác định trong Dự án Thư viện WiX từ Dự án Thiết lập WiX
- 21. Tạo dự án C# bằng CMake
- 22. Bao gồm glib.h trong dự án CMake
- 23. cmake vs waf cho dự án C++
- 24. Nhúng một dự án cmake vào trong một dự án khác?
- 25. Cách lập kế hoạch dự án
- 26. CMake: cách thêm cuda vào dự án hiện tại
- 27. Dự án Thiết lập Windows XNA không bao gồm dự án nội dung của tôi
- 28. Tạo dự án có thể phân phối lại với CMake
- 29. Thiết lập dự án với Eclipse và Mercurial
- 30. Thiết lập TeamCity để xây dựng dự án Android Studio
Bạn đã đọc Wiki http://www.cmake.org/Wiki/CMake trên cmake trang web? –
@SergeiNikulov Trích dẫn: 'Bạn hiện đang ở trên trang wiki CMake. Nhiều trang hiện không được NHẬN ĐỊNH và đôi khi được coi là thực hành không tốt. Chúng chỉ được lưu giữ như là tài liệu tham khảo cho các phiên bản CMake trước đó. ” – Zingam