Hãy xem xét một dự án C++, được tổ chức trong kho lưu trữ git. Giả sử rằng kho git có một mô-đun con mà từ đó một thư viện được xây dựng trên đó dự án (siêu) phụ thuộc. Nếu dự án (super) không chỉ phụ thuộc vào thư viện mà còn trên thư viện được xây dựng với các thông số cụ thể (CMake), làm thế nào để đảm bảo rằng môđun con được xây dựng với các tham số này khi dự án (siêu) được xây dựng?C++ với git và CMake: Làm thế nào để xây dựng submodules với các tham số cụ thể?
Trả lời
Tôi nghĩ câu trả lời đơn giản nhất là sử dụng tùy chọn -C
như được mô tả trong số SO answer này.
Tôi không hài lòng với giải pháp. Thứ nhất, nó được để lại cho người dùng gọi cmake với các tham số đúng. Thứ hai, đó là lời gọi CMake cho dự án chính, không phải là mô-đun con. –
Tôi không chắc bạn đang cố gắng làm gì. Tùy chọn '' -C'' có vẻ hợp lý khi bạn có một số cài đặt tùy chỉnh bạn cần sử dụng. Các lựa chọn khác dường như đang sử dụng mô-đun ExternalProject cmake hoặc kịch bản lệnh với kịch bản lệnh '' -P''. – Phil
Tùy chọn xây dựng (như MYLIB_WITH_SQLITE
) phải được thêm vào giao diện của thư viện, có nghĩa là, với biến số MYLIB_DEFINITIONS
trong trường hợp mô-đun cấu hình trường học cũ hoặc thuộc tính INTERFACE_COMPILE_DEFINITIONS
. config-mô-đun với lệnh install(EXPORT ...)
:
add_library(mylib ...)
if(MYLIB_WITH_SQLITE)
target_compile_definitions(mylib PUBLIC MYLIB_WITH_SQLITE)
endif()
...
install(TARGETS mylib EXPORT mylib-targets ...)
install(EXPORT mylib-targets ...)
Và trong thư viện tiêu thụ hoặc thực thi bạn có thể viết đơn giản kiểm tra thời gian biên dịch:
#ifndef MYLIB_WITH_SQLITE
#error mylib must be built with sqlite
#endif
Một giải pháp tôi xem xét là ngã ba repo của submodule, chỉnh sửa CMakeLists.txt để cụ thể hơn, và sau đó bao gồm sửa đổi CHÍNH của repo được chia đôi thành một mô-đun con. Không thích hợp nhưng có thể chấp nhận được.
CMake hỗ trợ các dự án bên ngoài với số ExternalProject_Add
nơi bạn có thể xác định cờ biên dịch theo ý thích của mình. Sử dụng nó để xây dựng submodules của bạn.
Thông tin chi tiết: https://cmake.org/cmake/help/v3.2/module/ExternalProject.html
- 1. Làm thế nào để xây dựng các tập tin cụ thể trong CMAKE mọi lúc?
- 2. cmake và xây dựng song song với "làm -jN"
- 3. git triển khai với submodules
- 4. Thư viện xây dựng với cmake
- 5. Không thể xây dựng dự án OpenCV với cmake
- 6. Xây dựng dự án MSVC với cmake và dòng lệnh
- 7. Làm thế nào để chạy ctest sau khi xây dựng dự án của tôi với cmake
- 8. Trộn nguồn C và lắp ráp và xây dựng với cmake
- 9. CMAKE: Xây dựng thư viện và liên kết với nó
- 10. Làm thế nào để xây dựng một trang trí với các thông số tùy chọn?
- 11. Jenkins lấy danh sách các thông số xây dựng và tham số
- 12. Tôi làm cách nào để xây dựng OpenCV với TBB?
- 13. Làm cách nào để xóa quyền cụ thể khi xây dựng ứng dụng Android với gradle?
- 14. CMake với makefiles: thêm âm thanh vào cuối xây dựng
- 15. Làm thế nào để thiết lập số lượng các chủ đề trong CMake xây dựng từ dòng lệnh?
- 16. Làm cách nào tôi có thể đặt cờ trình biên dịch cụ thể cho một mục tiêu cụ thể trong cấu hình xây dựng cụ thể bằng CMake?
- 17. Làm thế nào để hướng dẫn CMake sử dụng trình biên dịch kiến trúc xây dựng?
- 18. Làm cách nào để xây dựng các tham số tùy chọn làm dấu hỏi trong Slim?
- 19. Làm thế nào để xây dựng git với liên kết tĩnh?
- 20. unity3d và git submodules là nó có thể?
- 21. Làm thế nào để xây dựng lại tất cả các gói Debian của một hệ thống với cờ cụ thể?
- 22. Làm thế nào để sử dụng DLLImport với cấu trúc như các tham số trong C#?
- 23. Trộn C và C++ với CMAKE
- 24. Làm thế nào để liên kết với boost.system với cmake
- 25. Bower + Git submodules + Docker soạn
- 26. Làm thế nào để sử dụng một STL priority_queue + so sánh với một nhà xây dựng cụ thể?
- 27. Làm thế nào để liên kết với intersphinx để xây dựng django cụ thể (như cài đặt)?
- 28. Git submodules workflow
- 29. Jenkins: làm thế nào để thực hiện các tham số cần thiết trong một tham số xây dựng?
- 30. C# xây dựng truy vấn tham số SQL - LIKE%
Tôi xin lỗi để có được một chút off topic ở đây, nhưng đây là lý do tôi cố gắng tránh CMake nếu tôi có thể. Cuối cùng tôi đã tìm thấy chính xác một cuốn sách viết các tập tin CMake. Có 5 bajillion trên Make và autotools. Nếu những cuốn sách bỏ qua chủ đề bạn là SOL. – TLOlczyk
Mô-đun phụ của bạn có được xây dựng riêng hay là một phần của siêu dự án của bạn không? – nils
Mô-đun con là một thư viện được xây dựng riêng và sau đó được liên kết với một tệp thực thi của dự án (siêu). –