Tôi đang cố gắng sử dụng cmake (trên Linux với GNU make và g ++) để xây dựng một dự án với hai thư mục con: MyLib và MyApp. MyLib chứa nguồn cho một thư viện tĩnh; MyApp cần liên kết với thư viện đó. Tôi đang cố gắng xây dựng trên Linux bằng các tệp makefiles được tạo bằng cách sử dụng CMakeLists.txt sau:CMAKE: Xây dựng thư viện và liên kết với nó
cmake_minimum_required (VERSION 2.6)
project (MyProj)
include_directories (MyLib)
file(GLOB MyLibSrc MyLib/*.cpp)
add_library(MyLibrary STATIC ${MyLibSrc})
file(GLOB MyAppSrc MyApp/*.cpp)
add_executable(MyApplication ${MyAppSrc})
target_link_libraries(MyApplication MyLibrary)
Tác vụ 'gần như' này hoạt động. Nó không thành công tại thời gian liên kết bởi vì trong khi nó tạo libMyLibrary.a - nó nằm trong thư mục gốc. Khi tôi thêm:
link_directories(${MyProj_BINARY_DIR})
không có sự khác biệt.
Tôi đã có một vài câu hỏi (liên kết):
- cách tốt nhất để ép buộc cmake vào việc xây dựng thư viện của tôi và thực thi thành một 'thư mục dàn' — nói MyStage — để giữ mục tiêu tách là gì từ nguồn?
- Làm cách nào để thuyết phục cmake liên kết ứng dụng với thư viện?
- Nếu tôi muốn xây dựng bản gỡ lỗi và phiên bản phát hành, cách tốt nhất để mở rộng tập lệnh cmake của tôi là làm gì — đảm bảo rằng ứng dụng gỡ lỗi liên kết với thư viện gỡ lỗi và ứng dụng phát hành đối với thư viện phát hành?
Tôi là người mới đến tương đối so với cmake. Tôi đã đọc những gì tôi có thể tìm thấy trên web, nhưng thấy mình đang đấu tranh để có được thư viện của tôi để liên kết với thực thi của tôi. Loại cấu hình này, theo ý tôi, khá phổ biến. Một ví dụ mà từ đó đến giường cũi sẽ rất hữu ích, nhưng tôi đã không tìm thấy một.
tôi có thể xem như thế nào (1) có thể làm việc - mặc dù tôi không nghĩ rằng nó là gọn gàng. Tôi không muốn CMakeLists.txt trong 'thư mục dàn dựng' cùng với thư viện của mình, nếu tôi có thể giúp nó. – aSteve
Uhm, không, không, CMakeLists.txt ở trong cây nguồn. Đường dẫn được chuyển như một đối số cho cmake là thư mục chứa tệp CMakeLists.txt cấp cao nhất. Trong thiết lập này, dir "dàn dựng" là hoàn toàn trống rỗng trước khi gọi cmake. – kralyk