2013-03-14 30 views
8

Trong dự án của tôi có thư mục chứa thư viện của bên thứ ba (google test, zlib, ...). Tôi muốn đặt các thư viện trong một thư mục chung khi tất cả các thư viện này được xây dựng. Tôi đang cố gắng làm điều này với cmake nhưng tôi đang gặp vấn đề. Tôi đang cố gắng mã này:Sao chép hoặc di chuyển libs sau khi xây dựng với cmake

add_subdirectory(gtest-1.6.0)  
add_custom_command(
      TARGET gtest_main 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E copy ${SRC_LIB_DIR}/*.a ${DST_LIB_DIR}) 

Tôi nghĩ rằng vấn đề có thể là mục tiêu chính trong gtest không được định nghĩa ở cấp độ này nhưng ở một mức độ thấp hơn

Trả lời

8

Nếu bạn đặt CMAKE_LIBRARY_OUTPUT_DIRECTORY biến trong CMakeLists của bạn. txt trước khi gọi add_subdirectory (và tiểu dự án không ghi đè lên nó), thư viện sẽ rơi vào đúng chỗ.

Ngoài ra như thế này, mục tiêu trong tiểu dự án giữ sự phụ thuộc của chúng vào tệp đầu ra. Mà sẽ không làm việc với bản sao của bạn - mục tiêu sẽ luôn luôn lỗi thời và do đó được xây dựng lại.

EDIT: Tôi đã bỏ qua lệnh sao chép của bạn đang sao chép .a-files và nhờ nhận xét của @ Fraser tôi đã học được rằng CMAKE_ARCHIVE_OUTPUT_DIRECTORY nên thực hiện thủ thuật.

+0

Không hoạt động. Tạo mã này: SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "$ {PROJECT_BINARY_DIR}/third_party/lib/release") và sau đó thêm thư mục con gtest, không làm gì cả. Các thư viện luôn đi đến thư mục gốc của thư mục gtest. – Killrazor

+4

Vì gtest xây dựng 'STATIC' libs theo mặc định, bạn muốn đặt [' CMAKE_ARCHIVE_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ARCHIVE_OUTPUT_DIRECTORY) thay vì 'CMAKE_LIBRARY_OUTPUT_DIRECTORY' dùng cho' libED' libs. – Fraser

+0

Cảm ơn Fraser và Patrick. CMAKE_ARCHIVE_OUTPUT_DIRECTORY đã thực hiện thủ thuật. Cảm ơn cả hai nha!! – Killrazor

Các vấn đề liên quan