Tôi đang cố gắng để hệ thống xây dựng đa nền tảng hoạt động bằng CMake. Bây giờ phần mềm có một vài phụ thuộc. Tôi tự biên dịch chúng và cài đặt chúng trên hệ thống của mình.
Một số tệp ví dụ đã được cài đặt:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
Bây giờ CMake có một tệp find_package()
mở Find*.cmake
tệp và tìm kiếm sau thư viện trên hệ thống và xác định một số biến như SomeLib_FOUND
v.v.
CMakeLists.txt của tôi chứa một cái gì đó như thế này:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Lệnh đầu tiên xác định nơi CMake tìm kiếm sau Find*.cmake
và tôi đã thêm thư mục SomeLib
nơi FindSomeLib.cmake
có thể tìm thấy, do đó find_package()
hoạt động như mong đợi.
Nhưng điều này thật kỳ lạ bởi vì một trong những lý do tại sao find_package()
tồn tại là để thoát khỏi các đường dẫn được mã hóa cứng không chéo.
Làm thế nào điều này thường được thực hiện? Tôi có nên sao chép cmake/
thư mục của SomeLib
dự án của mình và thiết lập CMAKE_MODULE_PATH
tương đối không?